• 63.队列:1.    寻找经过结点最少的路径


    1.  寻找经过结点最少的路径

     

    【例14表示的是从城市A到城市H的交通图。从图中可以看出,从城市A城市H要经过若干个城市。现要找出一条经过城市最少的一条路线。
    【算法分析】
    看到这图很容易想到用邻接距阵来表示,0表示能走,1表示不能走。如图。
    63.队列:1. <wbr> <wbr> <wbr> <wbr>寻找经过结点最少的路径

    63.队列:1. <wbr> <wbr> <wbr> <wbr>寻找经过结点最少的路径

           首先想到的是用队列的思想。a数组是存储扩展结点的队列,a[i]记录经过的城市,b[i]记录前趋城市,这样就可以倒推出最短线路。具体过程如下:
    1 将城市A入队,队首为0、队尾为1
    2)将队首所指的城市所有可直通的城市入队(如果这个城市在队列中出现过就不入队,可用一布尔数组s[i]来判断),将入队城市的前趋城市保存在b[i]中。然后将队首加1,得到新的队首城市。重复以上步骤,直到搜到城市H时,搜索结束。利用b[i]可倒推出最少城市线路。

    代码:

    #include

    #include

    using namespace std;

    int a[10][10];// 0 biao  shi ke zou

    int n;

    int dl[90];

    int pre[10],flag[10];//0 biao shi mei zou

    void input()

    {

           scanf("%d",&n);

           for(int i=1;i<=n;++i)

             for(int j=1;j<=n;++j)

             scanf("%d",&a[i][j]);

    }

    void print(int d)

    {

          

           if(pre[d]!=0)

           print(pre[d]);

           printf("%d->",d);

          

    }

    void BFS()

    {

           int head=0,tail=0;

           ++tail;

           dl[tail]=1;

           pre[1]=0;

           flag[1]=1;//1 baio shi zou guo

           while(head

           {

                  ++head;

                  for(int i=1;i<=n;++i)

                  {

                         if(!flag[i]&&!a[dl[head]][i])

                         {

                                flag[i]=1;

                                ++tail;

                                dl[tail]=i;

                                pre[i]=dl[head];//bian hao

                         }

                         if(dl[tail]==n)

                         {

                                print(pre[n]);

                                head=tail;

                                break;

                         }

                  }

           }

    }

    int main()

    {

           freopen("1.in","r",stdin);

           input();

           BFS();

           printf("%d",n);

           return 0;

    }

  • 相关阅读:
    c++中的const关键字
    用类模板实现容器存储自定义数据类型(类似于STL里面的vector)
    用类模板实现容器存储普通数据类型(类似于STL里面的vector)
    pgmpy包的安装,以及conda的安装
    【SQL语言】SQL语言基础02
    【win7系统】win7系统常遇到的一些问题
    【博客收集】一些关于个人博客、程序员书单、程序资源、学习方法的博文(持续更新中~)!
    【分享】一些好的网站与技术博客
    【ORACLE】Oracle 忘记用户名和密码的和用户被锁定的解决办法
    【ORACLE】SQL Developer 与 PL/SQL Developer与SQL PLUS的使用问题
  • 原文地址:https://www.cnblogs.com/csgc0131123/p/5290336.html
Copyright © 2020-2023  润新知