poj 1122 ZOJ 1053 输出路径的地杰斯特拉
来源:互联网 发布:php erp系统 编辑:程序博客网 时间:2024/04/20 16:52
这个地杰斯特拉的标记路径比BFS的简单多了,个人感觉,这道题目就是输出以及输入非常蛋疼,输出非常容易PE;
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#define INF 100000000using namespace std;int judge[25];int target[25];//标记消防局;int step[105];//记录路径;int cost[25][25];//记录节点与节点之间的距离;int n,dis[25];//记录从火灾地点到点I的最短路径;int fire,num;//火灾路口以及消防局的数量int yes=0;void output()//输出。{ if(yes!=0) printf("\n");//这个地方搞得我PE了N次,就是在只有一组数据的时候不用空行; printf( "Org\tDest\tTime\tPath\n"); //printf("%d\n",num); while(num--) { //printf("yes\n"); int minstep=INF; int t; for(int i=1;i<=n;i++)//找出离火灾最近的消防局。 { if(target[i]==1&&minstep>dis[i]) { minstep=dis[i]; t=i; } } //printf("sss%d\n",t); target[t]=0;//千万要记住要把已经输出的消防队标记为0; printf("%d\t%d\t%d",t,fire,dis[t]); //printf("yes\n"); while(1) { printf("\t%d",t); t=step[t]; if(t==-1) break; } printf("\n"); } //printf("\n"); yes=1; return;}void solution(int point)//标准的地杰斯特拉,没什么好说的.{ for(int i=1;i<=n;i++) dis[i]=INF; memset(judge,0,sizeof(judge)); memset(step,-1,sizeof(step)); dis[point]=0; //judge[point]=1; int x; while(1) { x=-1; for(int i=1;i<=n;i++) { if(judge[i]==0&&(x==-1||dis[i]<dis[x])) x=i; } if(x==-1) break; judge[x]=1; for(int i=1;i<=n;i++) { if(judge[i]==0&&dis[i]>dis[x]+cost[x][i]) { step[i]=x; dis[i]=dis[x]+cost[x][i]; } } } //printf("yes\n"); //printf("%d %d %d \n",dis[4],dis[5],dis[6]); output();}int main(){ int t; char ch,x[10000]; //scanf("%d",&t); //while(t--) // { scanf("%d",&n); memset(cost,0,sizeof(cost)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&cost[j][i]); //cost[i][j]=cost[j][i]; if(cost[j][i]==-1) { cost[j][i]=INF; } } } //printf("yes\n"); scanf("%d",&fire); //printf("%d\n",fire); getchar(); gets(x);//输入消防队的位置,这个地方蛮蛋疼的; num=0; memset(target,0,sizeof(target)); int len=strlen(x); int tmp=0; for(int i=0;i<=len;i++) { if('0'<=x[i]&&x[i]<='9') { num++; target[x[i]-'0']=1; } } /*for(int i=1;i<=n;i++) { if(target[i]==1) printf("%d\n",i); }*/ //printf("yes\n"); solution(fire); // } return 0;}//最后提醒 所有的数组都要考虑归零!!!!
0 0
- poj 1122 ZOJ 1053 输出路径的地杰斯特拉
- poj-3084 输出路径的BFS
- POJ (BFS + 路径输出)
- ZOJ 1456 最短路 输出路径
- poj 1751 prim输出路径
- 【最大流 && 输出路径】POJ
- POJ 2230 - Watchcow 输出欧拉回路点的路径...
- POJ 1607 /ZOJ 1216 : Deck - 整齐输出
- Happy Programming Contest ZOJ+01背包问题+路径输出
- ZOJ 2319 Beautiful People(LIS二分法+路径输出)
- POJ 2337 输出欧拉路径
- poj 3984 迷宫问题(BFS+输出路径)
- POJ 1077 Eight(BFS:输出路径)
- poj 2250 Compromise dp lcs 路径输出
- poj 3984 迷宫问题 bfs输出路径
- poj 3984 迷宫问题【bfs+输出路径】
- poj 3984 迷宫问题(BFS+输出路径)
- poj 3984 迷宫问题【dfs+路径输出】
- TextView的setText方法
- ubuntu 12.04 简单配置samba服务,实现主机与虚拟机互通
- 黑马程序员_.NET类和对象
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
- 微信营销诀窍:有朋自各方来
- poj 1122 ZOJ 1053 输出路径的地杰斯特拉
- 静态数据成员
- C++ ini文件的读取与写入
- N卡Fermi架构
- stringstream的用法
- LCM调试
- QTcpSocket使用过程中的一些问题记录
- do the little IT bird,and do the best
- 母函数 基础