zoukankan      html  css  js  c++  java
  • 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开始查找;
         }
     }
  • 相关阅读:
    Win32 程序开发入门:一个最简单的Win32程序
    DirectShow 进行视频预览和录制
    DirectShow 获取音视频输入设备列表
    (原)关于人民币找零钱的问题
    (转)The C10K problem翻译
    (原)kenel开机logo的制作
    (原)关于udp的socket发送数据耗时的问题探讨
    (转)x264的一些参数设置对编码效率的影响
    (原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况
    (转)java 层调用Jni(Ndk) 持久化c c++ 对象
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782093.html
Copyright © 2011-2022 走看看