码迷,mamicode.com
首页 > 其他好文 > 详细

无权最短路 - 宽度优先搜索

时间:2017-09-13 23:20:18      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:begin   ror   iostream   namespace   push   测试   max   iter   ace   

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;
}

 

 

无权最短路 - 宽度优先搜索

标签:begin   ror   iostream   namespace   push   测试   max   iter   ace   

原文地址:http://www.cnblogs.com/pprp/p/7517932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!