更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
归并排序 #include <iostream> #include <vector> using namespace std; // 合并两个有序子数组 void merge(vector<int>& arr, int left, int mid, int right) { int n1 = mid - left + 1; // 左子数组的大小 int n2 = right - mid; // 右子数组的大小 // 创建临时数组 vector<int> L(n1); vector<int> R(n2); // 复制数据到临时数组 L[] 和 R[] for (int i = 0; i < n1; i++) L[i] = arr[left + i]; for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j]; // 合并临时数组到 arr[left..right] int i = 0; // 初始化第一个子数组的索引 int j = 0; // 初始化第二个子数组的索引 int k = left; // 初始化合并子数组的索引 while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; _1_; } else { arr[k] = R[j]; j++; } k++; } // 复制 L[] 中剩余的元素 while (i < n1) { arr[k] = L[i]; i++; k++; } // 复制 R[] 中剩余的元素 while (j < n2) { arr[k] = R[j]; j++; k++; } } // 归并排序函数 void mergeSort(vector<int>& arr, int left, int right) { if (left < right) { // 找到中间点 int mid = (left + right) / 2; // 递归排序左右两半 mergeSort(arr, left, mid); mergeSort(arr,_2_, right); // 合并两个有序子数组 merge(arr, left, mid, right); } } // 辅助函数:打印数组 void printArray(const vector<int>& arr) { for (int i = 0; i < arr.size(); i++) cout << arr[i] << " "; cout << endl; } // 主函数 int main() { vector<int> arr = {12, 11, 13, 5, 6, 7}; cout << "original array:\n"; printArray(arr); mergeSort(arr, 0, arr.size() - 1); cout << "\nsorted array:\n"; printArray(arr); return 0; }
深度优先搜索 #include <stdio.h> #include <queue> using namespace std; #define maxv 9999 int a[100][100]; int n,ne,v[100]={0};// 顶点一般 用来记录改点是否已访问 int GetFirstVex(int x) { int i; for(i=1;i<=n;i++) if(a[x][i]>0&&a[x][i]<maxv) return i; return -1; } int GetNextVex(int x,int w) { int i; for(i=w+1;i<=n;i++) if(a[x][i]>0&&a[x][i]<maxv) return i; return -1; } void dfs(int x) { // 用于存储当前顶点的邻接顶点编号 int w; // 打印当前顶点对应的字母标签,假设顶点编号从 1 开始,通过加 64 转换为 ASCII 码对应的字母 printf("%c",x+64); // 标记当前顶点已被访问,v 数组用于记录顶点的访问状态 v[x]=1; // 获取当前顶点的第一个邻接顶点编号,如果不存在则返回 -1 w=GetFirstVex(x); // 当存在邻接顶点时进行循环 while(w!=-1) { // 检查邻接顶点是否未被访问 if(v[w]!=1)// 未访问 // 对未访问的邻接顶点递归调用 dfs 函数进行深度优先搜索 dfs(w); // 获取当前顶点的下一个邻接顶点编号,如果不存在则返回 -1 w=GetNextVex(_1_,_2_); } } void bfs(int x) { queue<int> my; int w,u; printf("%c",x+64); v[x]=1; my.push(x); while(!my.empty()) { u=my.front(); my.pop(); w=GetFirstVex(u); while(w!=-1) { if(!v[w]) { printf("%c",w+64); v[w]=1; my.push(w); } w=GetNextVex(u,w); } } } int main(int argc, char *argv[]) { int i,j,x,y,c; scanf("%d%d",&n,&ne); for(i=0;i<100;i++) for(j=0;j<100;j++) if(i!=j) a[i][j]=0; else a[i][j]=0; for(i=0;i<ne;i++) { scanf("%d%d%d",&x,&y,&c); a[x][y]=c; } dfs(1); return 0; }
1 2