寻找路径数目
来源:互联网 发布:南京软件科技大学 筹 编辑:程序博客网 时间:2024/06/06 08:38
题意:输入包含多个测试用例输入0退出测试。吉米将每个十字路口或加入的路径从1开始编号。他的办公室是编号1,他的房子是编号2。每个测试用例的第一行是十字路口的数量N,1 < N≤1000,和路径数量的M。接下来的M行线每个包含路口a、b和整数距离1≤d≤1000000表示的道路长度d。吉米可以走任何他选择的道路。任一对十字路口之间最多有一个路径。
思路:建map数组,应用深度优先搜索找出路径条数。
#include<iostream> #include<queue> using namespace std; typedef struct n1 { int distens,flog; }node; node N[1005]; int map[1005][1005],k; int direct[1005]; void set(int n) { int i,j,m,n1,n2,d; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { map[i][j]=-1; } N[i].distens=10000000;N[i].flog=0;direct[i]=0; } cin>>m; while(m--) { cin>>n1>>n2>>d; if(map[n1][n2]!=0||map[n1][n2]>d) map[n1][n2]=map[n2][n1]=d; } } void spfa(int n) { queue<int> Q; int now; int i; N[2].distens=0;N[2].flog=1; Q.push(2); while(!Q.empty()) { now=Q.front(); Q.pop(); N[now].flog=0; //if(q.x==1)break; for(i=1;i<=n;i++) if(map[now][i]!=-1) { if(N[i].distens>N[now].distens+map[now][i]) { N[i].distens=N[now].distens+map[now][i]; if(N[i].flog==0) { N[i].flog=1; Q.push(i); } } } } } int DFS(int now,int n) { int i; if(direct[now]>0) return direct[now]; if(now==2) { return 1; } for(i=1;i<=n;i++) if(map[now][i]!=-1&&N[now].distens>N[i].distens) { direct[now]+=DFS(i,n); } return direct[now]; } int main() { int n; while(cin>>n&&n) { set(n); spfa(n); k=DFS(1,n); cout<<k<<endl; } }
0 0
- 寻找路径数目
- 街道网络路径数目计算
- 迷宫寻找路径
- ClassPathXmlApplicationContext()寻找文件路径
- OC_路径寻找
- 寻找最短路径
- 7.5路径寻找问题
- 寻找递减最长路径
- 路径寻找问题
- 62.寻找路径
- java寻找迷宫路径
- DFS寻找路径~
- 求任意两点路径数目+floyed+uva125
- 无向图最短路径的数目
- A*路径寻找算法入门
- A*路径寻找算法入门
- A*路径寻找算法入门
- 智能汽车如何寻找路径
- Sublime text3 常用配置
- spring--IOC容器
- spring--IOC容器
- GCD
- 专题四 第十道题
- 寻找路径数目
- Java Web实战04--Spring之属性注入和构造器注入
- Ps使用技巧--(一)
- C的结构体和C++结构体
- Python Web 5 —— 错误捕获和错误页
- ios推送相关资料整理
- 程序员面试金典题解 链式A+B
- opencv在图片中写入文字
- iOS开发,做UI时,用StoryBoard还是纯代码编写?