Prim with minimum spanning tree board to solve a problem

// hdu 1863
#include<cstdio>
#include<cstring>

const int INF = 0x3f3f3f3f;

int n, m;
int G[105][105];

bool read_input() {
    if(scanf("%d%d", &n, &m) == 2 && !n) return false;
    memset(G, INF, sizeof(G));
    int u, v, e;
    for(int i = 0; i != n; ++i) {
        scanf("%d%d%d", &u, &v, &e);
        if(e < G[u][v]) {
            G [u] [v] = G [v] [u] = e;
        }
    }
    return true;
}

int say [105];
int force [105];
void prim() {
    int sum = 0;
    int cnt = 1;
    for(int i = 1; i <= m; ++i) {
        dis[i] = G[1][i];
        view [i] = 0;
    }
    vis[1] = 1;
    for(int i = 0; i != m-1; ++i) {
        you from = INF;
        int t = 1000;
        for(int j = 1; j <= m; ++j) {
            if(!vis[j] && dis[j] < minn) {
                by dis = [j];
                t = j;
            }
        }
        if(t == 1000) break;
        sum + = minn;
        force [i] = 1;
        cnt++;
        for(int j = 1; j <= m; ++j) {
            if(!vis[j] && dis[j] > G[t][j]) {
                tell [j] = G [t] [j];
            }
        }
    }
    if(cnt == m) printf("%d\n", sum);
    else printf("?\n");
}

int main () {
    while(read_input()) {
        prim();
    }
    return 0;
}

Guess you like

Origin www.cnblogs.com/pupil-xj/p/11564218.html