poj1122 FDNY to the Rescue! 最短路
2012-10-29 17:09
274 查看
这道题是最短路问题,开始卡了好久后来才发现是因为i,j坐标输入有问题。我更改了i,j坐标顺序才发现正确结果,坑啊!
不过别的就是个裸地最短路了。
不过别的就是个裸地最短路了。
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm> #define INF 100000000 #define maxn 25 using namespace std; int n; int edge[maxn][maxn]; int dist[maxn]; int s[maxn]; int path[maxn]; struct point { int num,len; }points[maxn]; bool cmp(point a,point b) { return a.len<b.len; } void dijkstra(int v0) { int i,j,k; for(i=0;i<n;++i) { dist[i]=edge[v0][i]; s[i]=0; if(i!=v0&&dist[i]<INF) path[i]=v0; else path[i]=1; } s[v0]=1; dist[v0]=0; for(i=0;i<n-1;++i) { int min=INF,u=v0; for(j=0;j<n;++j) { if(!s[j]&&dist[j]<min) { u=j; min=dist[j]; } } s[u]=1; for(k=0;k<n;++k) { if(!s[k]&&edge[u][k]<INF&&dist[u]+edge[u][k]<dist[k]) { dist[k]=dist[u]+edge[u][k]; path[k]=u; } } } } int main() { int i,j; cin>>n; for(i=0;i<n;++i) for(j=0;j<n;++j) { cin>>edge[j][i]; if(edge[j][i]==-1) edge[j][i]=INF; } int begin,temp,count=0; cin>>begin; begin--; dijkstra(begin); while(cin>>temp) { if(temp==-2) break; points[count++].num=temp-1; } for(i=0;i<count;++i) points[i].len=dist[points[i].num]; sort(points,points+count,cmp); int shortest[maxn]; cout<<"Org\tDest\tTime\tPath"<<endl; for(i=0;i<count;++i) { cout<<points[i].num+1<<"\t"<<begin+1<<"\t"<<points[i].len; memset(shortest,0,sizeof(shortest)); int k=0; shortest[k]=points[i].num; while(path[shortest[k]]!=begin) { ++k;shortest[k]=path[shortest[k-1]]; } k++; shortest[k]=begin; if(shortest[k]==shortest[0]) cout<<"\t"<<shortest[k]+1; else for(j=0;j<=k;j++) cout<<"\t"<<shortest[j]+1; cout<<endl; } return 0; }
相关文章推荐
- POJ1122_FDNY to the Rescue!(逆向建图+最短路树)
- poj 1122||zoj 1053 FDNY to the Rescue!(最短路)
- POJ1122_FDNY to the Rescue!(逆向建图+最短路树)
- poj 1122 FDNY to the Rescue! 最短路
- POJ 1122 FDNY to the Rescue!(最短路+路径输出)
- ZPJ - 1053 FDNY to the Rescue!(最短路 Dijkstra),POJ 1122
- POJ 1122 FDNY to the Rescue!
- POJ-1122-FDNY to the Rescue!(迪杰斯特拉 反向建图 输出路径)
- poj 1122 FDNY to the Rescue!
- POJ 1122 FDNY to the Rescue!(最短路径)
- POJ 1122 FDNY to the Rescue!
- poj1122 - FDNY to the Rescue!
- POJ:1122 FDNY to the Rescue!
- POJ 1122 FDNY to the Rescue!
- Poj 1122 FDNY to the Rescue
- poj 1122 FDNY to the Rescue!
- poj 1122 FDNY to the Rescue! 最短路径 dijkstra算法
- poj 1122 FDNY to the Rescue! (dijkstra)
- zoj 1053 && poj 1122 FDNY to the Rescue!
- ZOJ1053-FDNY to the Rescue!(图论之最短路)