zzuoj 找最佳通路
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zzuoj 找最佳通路相关的知识,希望对你有一定的参考价值。
校内的OJ,得把题目粘上来
Description
有 n 个 城市,它们之间的交通情况已知。现在要求根据一个出发点Cs和一个到达点Cd,请编程序,由计算机找到从城市Cs 到 Cd 的一条路径,要求经过城市最少。
Input
输入由若干行组成,第一行有四个整数,n(1≤n≤50)、m(1≤m≤n*n)和s(1≤s≤n)、e(1≤e≤n);n表示城市数,m表示道路数,s和e表示出发点和到达点。
第 2至m+1行是m 条边的 信息,每行两个整数,为边的起点和终点。
Output
一个整数,经过城市的个数(包括起点和终点)
Sample Input
6 6 1 5
1 3
2 6
3 6
3 2
6 4
4 5
Sample Output
5
题解:这是今天讲的使用BFS来找最短路径的问题,有关DFS和BFS我还是单独写一篇来讲一下我的感悟。
这道题是典型的BFS问题,这里直接上代码。
顺手又用DFS撸了一遍
BFS
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<queue> 5 #define maxn 52 6 using namespace std; 7 8 bool path[maxn][maxn]; 9 int ctm[maxn]; 10 bool city[maxn]; 11 int n,pn,s,v,num; 12 13 queue<int> q; 14 15 void init() 16 { 17 for(int i=1;i<=n;i++) 18 for(int j=1;j<=n;j++) 19 path[i][j]=false; 20 21 memset(city,true,sizeof(city)); 22 23 } 24 25 void bfs(int s,int v) 26 { 27 int now; 28 q.push(s); 29 ctm[s]=1; 30 city[s]=false; 31 while(!q.empty()){ 32 now=q.front(); 33 q.pop(); 34 for(int i=1;i<=n;i++){ 35 if(city[i]&&path[now][i]){ 36 city[i]=false; 37 q.push(i); 38 ctm[i]=ctm[now]+1; 39 if(i==v){ 40 num=ctm[i]; 41 return ; 42 } 43 } 44 } 45 } 46 } 47 48 int main() 49 { 50 scanf("%d%d%d%d",&n,&pn,&s,&v); 51 52 init(); 53 54 int u,v; 55 for(int i=1;i<=pn;i++){ 56 57 scanf("%d %d",&u,&v); 58 path[u][v]=true;path[v][u]=true; 59 } 60 61 bfs(s,v); 62 63 printf("%d\n",num); 64 65 return 0; 66 }
BFS
#include<cstdio> #include<cstring> #define INF 999999999 #define maxn 53 using namespace std; bool path[maxn][maxn]; bool f[maxn]; int n,pn,s,v,mi,des,num; void init() { memset(path,false,sizeof(path)); memset(f,true,sizeof(f)); f[s]=false; mi=INF;des=1; } void dfs(int s,int v) { for(int i=1;i<=n;i++){ if(f[i]&&path[s][i]){ des++; if(i==v){ if(des<mi){ mi=des; num=des; } } f[i]=false; dfs(i,v); des--; f[i]=true; } } } int main() { scanf("%d%d%d%d",&n,&pn,&s,&v); init(); int u,l; for(int i=0;i<pn;i++){ scanf("%d%d",&u,&l); path[u][l]=true; } dfs(s,v); printf("%d",num); return 0; }
以上是关于zzuoj 找最佳通路的主要内容,如果未能解决你的问题,请参考以下文章