图的根节点-数据结构作业。。
生活随笔
收集整理的這篇文章主要介紹了
图的根节点-数据结构作业。。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?
手寫鄰接表 BFS
?
#include <iostream> #include <queue> using namespace std;const int maxn = 100000; const int maxm = 300000; struct Graph {int NE , NV;int head[maxn];struct Node{int next , v;Node(){}Node(int a,int b):v(a) , next(b){}}E[maxm];void clear(int n) {NV = n;NE = 0;memset(head,-1,sizeof(int)*n);}inline void Insert(int u,int v) {E[NE] = Node(v , head[u]);head[u] = NE ++;}void Print() {for(int i = 0 ; i < NV ; i ++) {printf("%d:",i);for(int j = head[i]; j != -1; j = E[j].next){printf(" %d",E[j].v);}puts("");}} }G;int n, m, ctr; int visit[maxn]; void BFS(int cur) {queue<int> Q;Q.push(cur);visit[cur] = 1;while( !Q.empty() ){for(int i = G.head[Q.front()]; i != -1; i = G.E[i].next ){if(!visit[G.E[i].v]){visit[G.E[i].v] = 1;Q.push(G.E[i].v);ctr++;if(ctr >= n - 1) printf("%d為根節點\n", cur);}}Q.pop();} }int main(){cin >> n;//讀入頂點數 G.clear(n);cin >> m;//讀入邊數int begin, end;for(int i = 0; i < m; ++i) {scanf("%d %d", &begin, &end);G.Insert(begin, end);}//遍歷圖 輸出根節點for(int i = 0; i < n; ++i){memset(visit, 0, sizeof(visit));ctr = 0;BFS(i);}return 0; }?
?
轉載于:https://www.cnblogs.com/snake-hand/archive/2013/06/07/3125130.html
總結
以上是生活随笔為你收集整理的图的根节点-数据结构作业。。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技嘉 怎么启动bios设置 技嘉主板如何
- 下一篇: 【C】——常用C时间库函数