poj 2457 Part Acquisition最短路径dijikstra迪杰斯特拉
2017-03-15 20:40
363 查看
题目地址:http://poj.org/problem?id=2457
题目给出的是哪里到哪里可以走,没给出距离,我们假设为距离全为1,不通的路即为无穷。用path【】数组记录前驱路径。
路径的输出用递归
#include<stdio.h>
#define INF 0xfffffff
int n,k;
int map[11000][11000];
int len[11000],vis[11000];//分别记录距离和访问记录
int path[10100]; //记录前驱路径
void map_0() //数组初始化
{
for(int i=0;i<1001;i++)
for(int j=0;j<1001;j++)
{
map[i][j]=INF;
vis[j]=0;
len[j]=INF;
path[j]=-1;
}
}
void output(int c,int count)
{
if(c<=1)
{
printf("%d\n1\n",count);
return ;
}
output(path[c],count+1);
printf("%d\n",c);
}
void dijkstra()
{
vis[1]=1;
while(1)
{
int min=INF;
int j=0;
for(int i=1;i<=k;i++)
{
if(vis[i]==0&&len[i]<min)
{ min=len[i];
j=i;
}
}
if(j==0)break;
vis[j]=1;
for(int i=1;i<=k;i++)
{
if(vis[i]==0&&len[i]>len[j]+map[j][i])
{
len[i]=len[j]+map[j][i];
path[i]=j;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
map_0();
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=1;
if(a==1)
{
len[b]=1;
path[b]=a;
}
}
dijkstra();
if(len[k]!=INF)
output(k,1);
else
puts("-1");
}
}
题目给出的是哪里到哪里可以走,没给出距离,我们假设为距离全为1,不通的路即为无穷。用path【】数组记录前驱路径。
路径的输出用递归
#include<stdio.h>
#define INF 0xfffffff
int n,k;
int map[11000][11000];
int len[11000],vis[11000];//分别记录距离和访问记录
int path[10100]; //记录前驱路径
void map_0() //数组初始化
{
for(int i=0;i<1001;i++)
for(int j=0;j<1001;j++)
{
map[i][j]=INF;
vis[j]=0;
len[j]=INF;
path[j]=-1;
}
}
void output(int c,int count)
{
if(c<=1)
{
printf("%d\n1\n",count);
return ;
}
output(path[c],count+1);
printf("%d\n",c);
}
void dijkstra()
{
vis[1]=1;
while(1)
{
int min=INF;
int j=0;
for(int i=1;i<=k;i++)
{
if(vis[i]==0&&len[i]<min)
{ min=len[i];
j=i;
}
}
if(j==0)break;
vis[j]=1;
for(int i=1;i<=k;i++)
{
if(vis[i]==0&&len[i]>len[j]+map[j][i])
{
len[i]=len[j]+map[j][i];
path[i]=j;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
map_0();
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=1;
if(a==1)
{
len[b]=1;
path[b]=a;
}
}
dijkstra();
if(len[k]!=INF)
output(k,1);
else
puts("-1");
}
}
相关文章推荐
- 最短路径算法(上)——迪杰斯特拉(Dijikstra)算法
- POJ 2457--Part Acquisition 【spfa最短路 + STL路径输出】
- 【图】最短路径--迪杰斯特拉(Dijkdtra)算法
- 【图】最短路径:迪杰斯特拉(Dijkstra)算法
- 最短路径___MPI Maelstrom(Poj 1502)
- POJ 2139——Six Degrees of Cowvin Bacon 最短路径
- POJ3268---Silver Cow Party (最短路径)
- 最短路径问题 POJ 3268
- POJ 1847 最短路径 垃圾水题可是坑爹多case问题初始化的锅
- POJ 3259(最短路径)
- POJ-1122-FDNY to the Rescue!(迪杰斯特拉 反向建图 输出路径)
- poj 3463 最短路径+次最短路径+邻接表
- POJ 1391 Erdos Numbers 最短路径
- poj 1125 Stockbroker(多源最短路径)
- 最短路径问题 迪杰斯特拉
- 迪杰斯特拉最短路径算法C语言简单实现
- 九度 OJ 1447 题 最短路径问题 Dijkstra(迪杰斯特拉)算法实现,使用vector模板模拟邻接链表
- 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)
- poj1125 Stockbroker Grapevine 图论,任意两点间最短路径,floyd
- [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现