您的位置:首页 > 编程语言 > C语言/C++

【Prim】-POJ-2421-构造公路

2014-03-12 21:06 411 查看
题目链接: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截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息