您的位置:首页 > 其它

POJ 1502 MPI Maelstrom(单源最短路|Dijkstra实现)

2010-06-05 00:27 543 查看
//单源最短路。最后答案应该处从起点到其他结点最短路中的最大值。
#include<iostream>
#include<queue>
using namespace std;
const int INF = 50000000;
int G[105][105];
bool flag[105];
int dis[105];
int n;
int dijkstra(int st)
{
int res = INF*(-1);
for(int i = 0;i < n;i++)	dis[i] = (i == st ? 0 : INF);//初始化
memset(flag,0,sizeof(flag));

for(int i = 0;i < n;i++)
{
int x,_min = INF;
for(int y = 0;y < n;++y)
{
if(!flag[y] && dis[y] < _min)//找出没标号结点中的最小值
_min = dis[x = y];
}
flag[x] = 1;//标号
for(int y = 0;y < n;++y)
{
dis[y] = min(dis[y],dis[x] + G[x][y]);//从标号结点出发对其他所有点进行松弛操作
}
}
for(int i = st + 1;i < n;++i)
if(dis[i] > res)
res = dis[i];//找出单源最短路中的最大值
return res;
}
int main()
{
freopen("in.txt","r",stdin);
char d[100];
scanf("%d",&n);
memset(G,0,sizeof(G));
for(int i = 1;i < n;++i)
{
for(int j = 0;j < i;j++)
{
scanf("%s",d);
if(d[0] != 'x')
{
G[i][j] = atoi(d);
G[j][i] = atoi(d);//利用atoi函数将char*转化为int
}
else
{
G[i][j] = INF;
G[j][i] = INF;
}
}
}
printf("%d/n",dijkstra(0));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: