博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
63.队列:1. 寻找经过结点最少的路径
阅读量:5111 次
发布时间:2019-06-13

本文共 1129 字,大约阅读时间需要 3 分钟。

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

 

【例
1
4
表示的是从城市
A
到城市
H
的交通图。从图中可以看出,从城市
A
城市
H
要经过若干个城市。现要找出一条经过城市最少的一条路线。
【算法分析】
看到这图很容易想到用邻接距阵来表示,
0
表示能走,
1
表示不能走。如图。
       
首先想到的是用队列的思想。
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;

}

转载于:https://www.cnblogs.com/csgc0131123/p/5290338.html

你可能感兴趣的文章
伪静态的实现方法:IIS环境下配置
查看>>
Selenium-webdriver系列教程(三)————如何执行一段js脚本
查看>>
使用debussy完成自动仿真
查看>>
MyEclipse中Web项目的发布和运行
查看>>
【模板】最短路
查看>>
理解 Lua 的那些坑爹特性
查看>>
Windows WMIC命令使用详解(附实例)
查看>>
如何从Powerdesigner进行数据建模并生成SQL脚本
查看>>
发现微信支付bug
查看>>
MVC过滤器---异常处理过滤器
查看>>
你不知道的常用 代码分析 规范
查看>>
rlwrap
查看>>
断点续传
查看>>
iBatis/MyBatis
查看>>
[python] Queue.Queue vs. collections.deque
查看>>
【转】在HTML中使用Javascript
查看>>
Ext.Net学习笔记23:Ext.Net TabPanel用法详解
查看>>
3.1.6 循环栅栏:CyclicBarrier
查看>>
线程池(1)
查看>>
awk字符提取
查看>>