题目:
http://blog.youkuaiyun.com/qq_35786326/article/details/79049278
题意:
求一个城市到其他城市的距离最小值
分析:
如果有些基础的童鞋,如果没有基础的可以去看我的算法大合集。其实这道题可以直接使用Dijkstra,
求出来后直接输出,那就美滋滋
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
int x[102][102],t[102],p[102];
int main()
{
int n,m,a,b;
n=read();m=read();m++;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{x[i][j]=read();if(x[i][j]==-1) x[i][j]=9999999;}
t[m]=1;
for(int i=1;i<=n;i++) p[i]=x[m][i];
p[m]=0;
int l,k;
for(int i=1;i<=n-1;i++)//Dijkstra
{
l=99999999;
k=0;
for(int j=1;j<=n;j++)
if(t[j]==0&&p[j]<l) l=p[j],k=j;
if(k==0) break;
t[k]=1;
for(int j=1;j<=n;j++)
if(p[k]+x[k][j]<p[j]) p[j]=p[k]+x[k][j];
}
for(int i=1;i<=n;i++)//输出每个城市的距离
printf("%d ",p[i]);
return 0;
}