广度优先搜索
来源:互联网 发布:淘宝买到三无产品 编辑:程序博客网 时间:2024/05/20 04:47
struct Node{ int color; int distance; int prev;};enum COLOR{ WHITE, GRAY, BLACK};int BFS(int** matrix, int num_node,int source, int dest){ Node* node = new Node[num_node]; for (int i = 0; i < num_node; i++) { node[i].color = WHITE; node[i].distance = 0x7fffffff; node[i].prev = 0xffffffff; } queue<int> que; int cur = source; node[source].color = GRAY; node[source].distance = 0; que.push(cur); while (!que.empty()) { int cur = que.front(); que.pop(); for (int k = 0; k < num_node; k++) { if (matrix[cur][k] == 1 && node[k].color == WHITE) { que.push(k); node[k].color = GRAY; node[k].prev = cur; node[k].distance = node[cur].distance + 1; } } node[cur].color = BLACK; } printf("dis from %d to %d is %d\n", source, dest, node[dest].distance); cur = dest; printf("path is \n"); while (cur != source) { printf("%d\t", cur); cur = node[cur].prev; } printf("%d\n", cur); return node[dest].distance;}int main(){ int num_node, num_vert; int binary_vertex; FILE* fp = fopen("input.txt", "r"); char buf[1024]; if (fscanf(fp, "%d %d %d\n", &num_node, &num_vert,&binary_vertex) != 3) { fprintf(stderr, "\nfscanf error: %s: %d\n", strerror(errno), errno); exit(1); } int** matrix = new int*[num_node]; for (int i = 0; i < num_node; i++) { matrix[i] = new int[num_node]; memset(matrix[i], 0, num_node * sizeof(int)); } while (fgets(buf, 1024, fp) != NULL) { int begin, end; if (sscanf(buf, "%d %d\n", &begin, &end) != 2) { fprintf(stderr, "\nsscanf error: %s: %d\n", strerror(errno), errno); exit(1); } if (binary_vertex == 1) { matrix[end][begin] = 1; } matrix[begin][end] = 1; } for (int i = 0; i < num_node; i++) { for (int j = 0; j < num_node; j++) { printf("%4d",matrix[i][j]); } printf("\n"); } int source = 4; int dest = 2; int dis = BFS(matrix,num_node, source, dest); return 0;}----------DFS----------struct DFSNode{ int color; int prev; int time_start; int time_finish;};int time = 0;void DFSVisit(int** matrix, DFSNode* node,int num_node,int node_index){ time++; node[node_index].color = GRAY; node[node_index].time_start = time; for (int k = 0; k < num_node; k++) { if (node[k].color == WHITE&&matrix[node_index][k] == 1) { node[k].prev = node_index; DFSVisit(matrix, node, num_node, k); } } node[node_index].color = BLACK; time++; node[node_index].time_finish = time;}int DFS(int** matrix, int num_node, int source, int dest){ DFSNode* node = new DFSNode[num_node]; for (int i = 0; i < num_node; i++) { node[i].color = WHITE; node[i].prev = 0xffffffff; node[i].time_start = 0; node[i].time_finish = 0; } for (int k = 1; k < num_node; k++) { if (node[k].color == WHITE) { DFSVisit(matrix, node,num_node, k); } } //int cur = dest; //printf("path is \n"); //while (cur != source) //{ // printf("%d\t", cur); // cur = node[cur].prev; //} //printf("%d\n", cur); printf("time:\n"); for (int i = 1; i < num_node; i++) { printf("node %d: start = %d, finish = %d\n", i, node[i].time_start, node[i].time_finish); } return 0;}
阅读全文
0 0
- 广度优先搜索算法
- 双向广度优先搜索
- 广度优先搜索法
- pku2251(广度优先搜索)
- POJ1184Clerver_Writer:广度优先搜索
- Java广度优先搜索
- [AI]广度优先搜索
- 广度优先搜索-BFS
- 广度优先搜索算法
- 广度优先搜索算法
- BFS广度优先搜索
- 广度优先搜索 BFS
- 广度优先搜索
- [ 算法 ]广度优先搜索!
- 广度优先搜索
- 广度优先搜索算法
- 广度优先搜索算法
- 广度优先搜索
- 0.3 CSDN Markdown简明教程3-表格和公式
- Failed to load ApplicationContext异常java.lang.NoSuchMethodError
- 把数组排成最小的数
- Ignatius and the Princess II
- SecureCRT自动登录
- 广度优先搜索
- 你知道这些和Linux有关的物流操作系统吗?
- 0.4 CSDN Markdown简明教程4-UML图
- C++学习日记18——C++继承: 公有public, 私有private, 保护protect
- 关于@Requestbody的注解
- Python 对两个文件中数据的处理
- 0.5 CSDN Markdown简明教程5-快速上手
- Mysql.Note3
- Android图片加载框架最全解析(四),玩转Glide的回调与监听