poj 1122
来源:互联网 发布:js读取txt文件内容 编辑:程序博客网 时间:2024/06/06 04:16
输出错了n遍
道路距离为0没考虑错了n遍
#include <iostream>
#include <cstdio>#include <algorithm>
#include <cstring>
#define INF 1000000 //无穷大
#define MAXN 200 //顶点个数的最大值
using namespace std;
int n; //顶点个数
int Edge[MAXN][MAXN]; //邻接矩阵
int S[MAXN]; //Dijkstra 算法用到的3 个数组
int dist[MAXN]; //
int path[MAXN]; //
void Dijkstra( int v0 ) //求顶点v0 到其他顶点的最短路径
{
int i, j, k; //循环变量
for( i=1; 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; //顶点v0 加入到顶点集合S
for( i=0; i<n-1; i++ ) //从顶点v0 确定n-1 条最短路径
{
int min = INF, u = v0;
//选择当前集合T 中具有最短路径的顶点u
for( j=1; j<=n; j++ ) //(1)
{
if( !S[j] && dist[j]<min )
{
u=j;
min = dist[j];
}
}
S[u] = 1; //将顶点u 加入到集合S,表示它的最短路径已求得 //(2)
//修改T 集合中顶点的dist 和path 数组元素值 //(3)
for( k=1; 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;
}
}
}
}
struct p
{
int path[22];
int time;
int org;
int dest;
int l;
} a[222];
int cmp(p a,p b)
{
return a.time<b.time;
}
int main( )
{
int i, j,k,l,m; //循环变量
scanf( "%d", &n ); //读入顶点个数n
for( i=1; i<=n; i++ )
{
for( j=1; j<=n; j++ )
{
scanf("%d",&Edge[i][j]);
if(Edge[i][j]==-1||i==j&&Edge[i][j]==0)
Edge[i][j]=INF;
}
}
int st;
scanf("%d",&st);
l=0;
char c;
while(c!='\n')
{
scanf("%d%c",&a[l++].org,&c);
}
i=0;
sort(a,a+l,cmp);
for(i=0; i<l; i++)
{
Dijkstra(a[i].org);
a[i].dest=st;
a[i].time=dist[st];
memset( a[i].path, 0, sizeof(a[i].path) );
int k = 0; //k 表示shortest 数组中最后一个元素的下标
a[i].path[k] = st;
while( path[ a[i].path[k] ] != 0 )
{
k++;
a[i].path[k] = path[ a[i].path[k-1] ];
}
k++;
a[i].path[k] = 0;
a[i].l=k-2;
}
sort(a,a+l,cmp);
printf("Org\tDest\tTime\tPath\n");
for(i=0;i<l;i++)
{
printf("%d\t%d\t%d",a[i].org,a[i].dest,a[i].time);
for(j=a[i].l;j>=0;j--)
{
printf("\t%d",a[i].path[j]);
}
// printf("%d",a[i].path[j]);
puts("");
}
return 0;
}
0 0
- poj 1122
- poj 1122
- poj 1122 dijkstra
- poj 1122最短路
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- haudoopMR程序如何做表之间的链接
- 什么是渡假式交换酒店,先记一下
- 浅谈编译器编译地址 ,cpu统一编址的物理地址,程序载入内存的地址。
- android xml 无法自动提示
- RMQ算法 (区间最值问题)
- poj 1122
- 英语六级听力应试技巧:“五边处理法”
- UItableviewCell重用注意事项
- linux命令大全
- 【cocos2d-x】3.0 C++11 特性
- python 开一个简单的服务器
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- 从B树、B+树、B*树谈到R 树
- Mint Linux自定义快捷键不支持中文路径的问题的解决