题目链接:http://poj.org/problem?id=2421
题目描述:最裸的最短路题目
解题思路:
明明是一个最裸的最短路题。周赛那天竟然一直WA。唉,后来自己试试,竟然又WA,拜托。。这是最裸体啊。。我到底怎么了?!然后找张纸画了画,发现prim函数里写得太混乱了,错了好几个地方,看来是我没理解透彻,唉~说来例会那天也挂黑板上了。。下次再也不溜号了。。= = 555555 T_T
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int INF=9999999;
int cost[1015][1015],dis[1015];
bool vis[1015];
int N;
int prim()
{
int from,to,ans=0,p,i;
from=1;
vis[1]=1;
for(to=1;to<=N;to++)
dis[to]=cost[from][to];
while(1)
{
int mindis=INF;
for(to=1;to<=N;to++)
{
if(dis[to]<mindis&&!vis[to])
{
mindis=dis[to];
p=to;
}
}
if(mindis==INF)break;
vis[p]=1;
ans+=mindis;
from=p;
for(to=1;to<=N;to++)
{
dis[to]=min(dis[to],cost[from][to]);
}
}
return ans;
}
int main()
{
freopen("2421_input.txt","r",stdin);
int ans,i,j,num;
while(cin>>N)
{
for(i=1;i<=N;i++)
dis[i]=INF;
memset(vis,0,sizeof(vis));
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
cin>>cost[i][j];
}
cin>>num;
while(num--)
{
cin>>i>>j;
cost[i][j]=cost[j][i]=0;
}
ans=prim();
cout<<ans<<endl;
}
return 0;
}
AC截图: