//#include <iostream> #include <stdio.h> //#include <fstream> //using namespace std; #define MAXN 501 #define INF 0x3fffff /*Accepted 676K 750MS*/ /*528K 157MS*/ //var int n; int num; int a[MAXN][MAXN]; //fstream fin; //function void prim(int u); int main() { // fin.open("2485.txt",ios::in); int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&a[i][j]); num=0; //用prim算法计算最小生成树 prim(0); printf("%d ",num); } //system("pause"); return 0; } void prim(int u) { int *lowset=new int[n]; //表示已经被选择的点到n个点的距离 bool *s=new bool[n]; //初始化lowset和s for(int i=0;i<n;i++) { s[i]=false; if(u!=i&&a[u][i]) lowset[i]=a[u][i]; else lowset[i]=INF; } s[u]=true; int p; for(int i=0;i<n-1;i++) { int min=INF; for(int j=0;j<n;j++) { if(min>lowset[j]&&!s[j]) { min=lowset[j]; p=j; } } if(min>num) num=min; s[p]=true; //更新lowset for(int j=0;j<n;j++) { if(a[p][j]<lowset[j]&&!s[j]) lowset[j]=a[p][j]; } } delete []lowset; delete []s; }
同一个程序,用scanf输入只要157ms而用cin输入要700多ms。所以对于多数据输入时,用scanf