图论算法之图的遍历
/** 图论算法 遍历 */ #include<stdio.h> #include<vector> #include<queue> using namespace std; int g[100][100];//邻接矩阵表示法,0代表无边,1代表右边 int visit[100];//0代表没遍历,1代表遍历过 void BFS(int n, int start)//从start号节点开始BFS遍历 { queue<int> Q; //printf("%d ",start); Q.push(start); visit[start] = 1; for(int i=1;i<=n;i++) { if(g[start][i] == 1) { //printf("%d ",i); Q.push(i); visit[i] = 1; } } while(!Q.empty()) { int tt = Q.front(); Q.pop(); printf("%d ",tt); for(int i=1;i<=n;i++) { if(g[tt][i]==1 && visit[i] == 0) { //printf("%d ",i); Q.push(i); visit[i] = 1; } } } } void DFS(int n, int start)//从start号节点开始遍历 { printf("%d ",start); visit[start] = 1; for(int i=1;i<=n;i++) { if(g[start][i] == 1 && visit[i] == 0) { //printf("%d ",i); visit[i] = 1; DFS(n, i); } } } void Print(int n)//打印矩阵,0行0列不用 { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { printf("%d ",g[i][j]); } printf("\n"); } } int main () { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); g[a][b] = 1;//无向图 g[b][a] = 1; } //BFS(n,1); //DFS(n, 1); return 0; } /** 4 4 1 2 2 3 3 4 4 1 4 3 1 3 3 2 2 4 */
本文来自博客园,作者:永恒&,转载请注明原文链接:https://www.cnblogs.com/Sun-yuan/p/14496553.html