• SDUT2139图结构练习——BFS——从起始点到目标点的最短步数


    #include <bits/stdc++.h>
    using namespace std;
    #define maxn 10086
    int num[maxn]; //记录到n结点的最短距离
    int Map[maxn][maxn]; //记录结点的连通性
    int vis[maxn]; //记录是否已遍历过改结点
    int Now[maxn]; //储存已遍历的结点
    int n,m;
    int BFS(int k)
    {
        memset(vis,0,sizeof(vis));
        memset(Now,0,sizeof(Now));
        memset(num,1061109567,sizeof(num));
        int ss = 0,ee =0;
        Now[ss++] = k;//保存头结点
        vis[k] = 1; //标记当前结点已经被访问过
        num[k] = 0; //初始化为0
        while(ss>ee)
        {
            int now = Now[e++]; //得到队列的首元素
            for(int i=n;i>=1;i--)
            {
                if(Map[now][i]==1 && vis[i]==0) //当前结点与i结点连通 && 没有遍历过
                {
                    Now[ss++] = i; 将i结点存入队列
                        vis[i] = 1; //标记遍历过
                num[i] = num[i]<num[now]?num[i]:num[now]+1;
                //若i节点此前到n节点的距离<当前节点到n节点的距离,num[i]不变;
                 }                                            //否则,i节点到n节点的距离 = num[now]+1;


                }
            }
        }
         if(num[1]==1061109567)
            printf("NO\n");
         else
            printf("%d\n",num[1]);
     }
     int main()
     {
         int u,v;
         while(~scanf("%d %d",&n,&m))
         {
             memset(Map,0,sizeof(Map));
             for(int i=0;i<m;i++)
             {
                 scanf("%d %d",&u,&v);
                 Map[u][v]=1;
             }
             BFS(n);//从n开始查找;
         }
     }
  • 相关阅读:
    获取自己的网络出口IP地址
    go语言开发IDE
    国内可用的python源
    Tomcat 配置及优化
    大小不固定的图片和多行文字的垂直水平居中
    行内元素与块级元素比较全面的区别和转换
    常用的四种CSS样式表格
    JS鼠标事件大全
    Javascript 5种方法实现过滤删除前后所有空格
    JavaScript trim 实现(去除字符串首尾指定字符)
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/6444552.html
Copyright © 2020-2023  润新知