广度优先搜索初级题目

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广度优先搜索初级题目

邮递员问题

题目描述:

有一个邮递员要在n个城市之间来回送信。但有的城市之间有大路相连而有的没有路。现在要由一个城市到另一个城市送信,中途最少要经过多少个其它的城市呢?

输入:

第一行是n,k(1<=n<=10000, 1<=k<=20000),接下来就是k行。

这k行每行有两个数a,b(1 <= a,b <= n),表示城市a和b之间有大路

k行以后就是两个数p和q。

当n,k输入都为0的时候结束。

输出:

输出从城市p到城市q之间最少要经过的其它的城市的数目。

如果p和q之间不连通则输出"No solution"

样例输入1:

6 6

1 4

1 2

2 3

3 4

5 4

5 6

1 6

0 0

样例输出:

2

样例输入2:

3 1

1 2

1 3

0 0

样例输出:

No solution

以下是我的代码,与大家交流分享

#include

#include

#include

using namespace std;

intn,k;

int step[20010];

intlian[10002][10002];

int visit[20010];

intsrc,des;

int main()

{

while(true)

{ cin>>n>>k;

if(n==0&&k==0)break;

inta,b,x;

memset(lian,0,sizeof(lian)); memset(visit,0,sizeof(visit)); memset(step,10000,sizeof(step)); for(inti=0;i

{ cin>>a>>b;

lian[a][b]=1;

lian[b][a]=1; }

cin>>src>>des;

queue q;

q.push(src);

step[src]=0;

visit[src]=1;

while(!q.empty())

{ x=q.front();

q.pop();

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

{ if(lian[x][j]&&step[x]+1

visit[j]=1;

q.push(j);}

}

}

if(!visit[des])

cout<<"No solution"<

cout<

}

system("pause");

return 0;

}

相关文档
最新文档