2017-09-13 21:54:52
writer:pprp
图论全部都忘记了,重新学一下吧,之前学的实在是太烂了
测试数据如下:
7 12//顶点个数, 路径个数
3 1
1 4
1 2
2 4
2 5
4 3
4 5
4 6
4 7
3 6
5 7
6 7
3//起始点
代码如下:
/* @theme:无权最短路径问题 @complexity:O(|E| + |V|) @writer:pprp @begin:21:10 @end:21:53 @error: @declare: breadth first search @date:2017/9/13 */ #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <queue> using namespace std; const int maxn = 100; const int INF = 10000; vector<int> vt[maxn]; queue<int> qu; int dis[maxn]; int vis[maxn]; int stpt, vertex, path; void init() { for(int i = 0 ; i < maxn; i++) dis[i] = INF; memset(vis,0,sizeof(vis)); } void BFS(int v) { dis[v] = 0; qu.push(v); vis[v] = 1; while(!qu.empty()) { v = qu.front(); qu.pop(); for(int i = 0 ; i < (int)vt[v].size(); i++) { if(dis[vt[v][i]] == INF) { dis[vt[v][i]] = dis[v] + 1; qu.push(vt[v][i]); } } } } int main() { freopen("in.txt","r",stdin); init(); cin >> vertex >> path; int x, y; for(int i = 0 ; i < path ; i++) { cin >> x >> y; vt[x].push_back(y); } cin >> stpt; BFS(stpt); for(int i = 1 ; i < vertex; i++) cout << dis[i] << " "; cout << endl; return 0; }
时间: 2024-10-25 23:29:22