shortest path in unweighted graph soj 1006(无权最短路径)

https://blog.csdn.net/yion_l/article/details/7748604

给出一个无权无向图,找出各点到起点1的最短路径距离。
思路:
1.先把边存起来,
2.从1开始广搜,利用队列,将与1相连的顶点且未被访问过的顶点存入队列中,并更新该顶点已经被访问过(保证距离最短),同时,算出此时该顶点到1的距离
3.重复步骤2,求出该顶点到上一个顶点的距离。
最终即可得到最终最短距离。

#include
#include
#include
using namespace std;

int m, n;
int a[1000][1000];
int visit[1000];
int longth[1000];

void bfs()
{
    queue  q1;
    q1.push(1);
    visit[1]=1;
    while(!q1.empty())
    {
        int temp=q1.front();//queue中的pop为front,没有pop 
        q1.pop();
        longth[1]=0;
        for(int i=1;i<=m;i++)
        {
        if(a[temp][i]&&!visit[i])
            {q1.push(i);
            visit[i]=1;//以上实现BFS 广义搜索
            longth[i]=longth[temp]+1;}//在此基础上增加 当前节点的路径为上一个节点加1;因为有visit[]的保证下,
                                        //节点必须是最先访问的,那么保证了该路径最短
        }
    }
}

int main()
{
    cin>>m>>n;
    memset(a,0,sizeof(a));
    memset(visit,0,sizeof(visit));
    memset(longth,-1,sizeof(longth));//-1表示未联通
    for(int i=0;i>xx>>yy;
        a[xx][yy]=a[yy][xx]=1;
    }
    bfs();
    for(int i=1;i<=m;i++)
    {
        cout<

延申:https://blog.csdn.net/qq_35710556/article/details/79583229
其他方法求解最短路径

你可能感兴趣的:(shortest path in unweighted graph soj 1006(无权最短路径))