AccecptTime: 2008-12-18 13:12:04
Language: C++
Memory: 328K
Time: 63MS
Errors: 2 WA + 1 CE
Algorithm: 最小生成树
- #include <iostream>
- using namespace std;
- //分别用于储存节点是否已经被加入
- int in[101],inv[101];
- //路径储存
- int road[101][101];
- int main()
- {
- int n, sum = 0;
- int min, mink;
- int i,j,k;
- while(cin >>n) {
- sum = 0;
- //初始化
- memset(in,0,101*sizeof(int));
- memset(inv,0,101*sizeof(int));
- for(int i = 0; i < n; i++)
- for( int j = 0; j < n; j++)
- cin >> road[i][j];
- in[0] = 0;
- inv[0] = 1;
- for( i = 1; i < n; i++) {
- min = 999999999;
- for(j = 0; j < i; j++)
- for(k = 0; k < n; k++)
- if( !inv[k] && road[(in[j])][k] && road[(in[j])][k] < min) {
- min = road[(in[j])][k];
- mink = k;
- }
- in[j] = mink;
- inv[mink] = 1;
- sum += min;
- }
- cout << sum << endl;
- }
- }
这道题考察的是最小生成树,由于输入原因,我只使用了Prim算法.在一开始没有找好逻辑关系,导致了2WA和1CE.下次要处理好逻辑关系.