| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用prim算法,但是memset清零时出错了,大牛能告诉下原因么?在这个函数中,我定义了一个flag[100]的标志,用memset清0;结果用prim做的时候wa的无数次。后来我把这个用for循环改了下,马上就通过了。。。
大家能够帮忙解释下为什么么?谢谢大牛了
#include <iostream>
using namespace std;
int n;
int q;
struct point
{
int line;
int row;
};
//point a[5050];
int b[100][100];
int flag[100];
int opt[100];//已经选择了的点。
int main()
{
int i,j;
while(cin>>n)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>b[i][j];
}
}
cin>>q;
if(q!=0)
{
int x,y;
for(i=0;i<q;i++)
{
// cin>>a[i].line>>a[i].row;
cin>>x>>y;
b[x-1][y-1]=0;
b[y-1][x-1]=0;
}
}
// memset(flag,0,100);
flag[0]=1;
for(i=1;i<n;i++)
{
flag[i]=0;
}
memset(opt,0,100);
opt[0]=0;
// flag[0]=1;
int p=0;
int sum=0;
int ver=0;
while(p!=n-1)
{
int min=1000001;
for(i=0;i<=p;i++)
{
for(j=0;j<n;j++)
{
if(!flag[j]&&b[opt[i]][j]<min)
{
min=b[opt[i]][j];
ver=j;
}
}
}
sum+=min;
opt[++p]=ver;
flag[ver]=1;
}
cout<<sum<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator