POJ 1789 上的问题,求解.......
今天我看到poj上的1789这道题目,是个最小生成树问题,开始我用prim做,提交了n次,没通过,实在没找出错误在哪,
但每次都是“return error”,那时我是真的无语了,后来我把那些变量改成全局变量,嘿,他居然通过了。
这是怎么回事????
在poj上返回“return error”是超时把,把变量弄成全局变量能节省时间吗????
没改之前的代码:
#include<iostream>using namespace std;int f(char*a,char*b){ int sun=0,k; for( k=0;k<7;k++) if(a[k]!=b[k]!=0)sun++; return sun;}void prim(char str[][7],int t){ int i,j,k; int a[2000][2000]={0}; for(i=0;i<t;i++) for(j=i;j<t;j++) a[i][j]=a[j][i]=f(str[i],str[j]); int quan[2000]; bool v[2000]; v[0]=1; for(i=1;i<t;i++) { quan[i]=a[0][i]; v[i]=0; } int sum=0; for(i=1;i<t;i++) { int j,min=8; for( k=1;k<t;k++) if(min>quan[k]&&!v[k]){min=quan[k];j=k;} v[j]=1; sum+=min; for(k=1;k<t;k++) if(quan[k]>a[j][k]&&!v[k]){quan[k]=a[j][k];} } cout<<"The highest possible quality is 1/"<<sum<<'.'<<endl;}int main(){ char str[2000][7]; int t,i; while(cin>>t&&t) { for( i=0;i<t;i++) cin>>str[i]; prim(str,t); } return 0;}
#include<iostream>using namespace std;char str[2000][7];int a[2000][2000];int quan[2000];bool v[2000];int t;int f(char*a,char*b){ int sun=0,k; for( k=0;k<7;k++) if(a[k]!=b[k]!=0)sun++; return sun;}void prim(){ int i,j,k; for(i=0;i<t;i++) for(j=i;j<t;j++) a[i][j]=a[j][i]=f(str[i],str[j]); v[0]=1; for(i=1;i<t;i++) { quan[i]=a[0][i]; v[i]=0; } int sum=0; for(i=1;i<t;i++) { int j,min=8; for( k=1;k<t;k++) if(min>quan[k]&&!v[k]){min=quan[k];j=k;} v[j]=1; sum+=min; for(k=1;k<t;k++) if(quan[k]>a[j][k]&&!v[k]){quan[k]=a[j][k];} } cout<<"The highest possible quality is 1/"<<sum<<'.'<<endl;}int main(){ int i; while(cin>>t&&t) { for( i=0;i<t;i++) cin>>str[i]; prim(); } return 0;}
#include<iostream>#include<cstring>using namespace std;#pragma comment(linker,"/STACK:102400000,102400000") //开大栈区int main(){ cout<<"hello world"<<endl; return 0;}