您的位置:首页 > 编程语言 > Go语言

POJ 2263 Heavy Cargo 最短路dijkstra

2012-07-24 18:52 302 查看
字符串处理+dijkstra修改一下

View Code

#include<stdio.h>
#include<string.h>
#define maxn 201

int n,m,num;
int dis[maxn],adj[maxn][maxn];
bool vis[maxn];
int MIN(int a ,int b)
{
return a < b ? a : b;
}
int MAX(int a, int b)
{
return a > b ? a :b;
}
char str[201][35],s[35];
int find()
{
int i;
for(i=0;i<num;i++)
{
if(strcmp(str[i],s)==0)return i;
}
strcpy(str[num++],s);
return num-1;
}
int dijkstra(int v, int e)
{
int i ,j ,k, u, max;
for(i=0;i<n;i++)
{
dis[i]=adj[v][i];
vis[i]=0;
}
vis[v]=1;dis[v]=0;
for(i=0;i<n-1;i++)
{
max = -1;
for(j=0;j<n;j++)
{
if(max < dis[j]&&!vis[j])
{
max = dis[j];
u = j;
}
}
if(max == -1)break;
vis[u]=1;
for(j=0;j<n;j++)
{
if(!vis[j]&&adj[u][j]>-1)
{
dis[j]=MAX(MIN(dis[u],adj[u][j]),dis[j]);
}
}
}
return dis[e];
}
int main()
{
int i,j,x,y,w,X=1;
while(~scanf("%d%d",&n,&m)&&n)
{
num=0;
memset(str,0,sizeof(str));
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
adj[i][j]= -1;
}
}
while(m--)
{
scanf("%s",s);
x=find();
scanf("%s",s);
y=find();
scanf("%d",&w);
if(adj[x][y] < w)
{
adj[x][y]=w;
adj[y][x]=w;
}
}
scanf("%s",s);int ss=find();
scanf("%s",s);int t=find();
printf("Scenario #%d\n%d tons\n\n",X++,dijkstra(ss,t));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: