poj1789 prim

来源:互联网 发布:应用搬家软件 编辑:程序博客网 时间:2024/05/20 16:31

Source Code

Problem: 1789 User: fan1913068672Memory: 15696K Time: 625MSLanguage: C++ Result: Accepted
  • Source Code
    #include"iostream"#include"cstdio"#include"cstring"using namespace std;const int INF = 7777;char str[2001][10];int G[2001][2001];int visit[2001];struct Edge{    int st;    int len;}Edges[2001];int n;int check(int str1,int str2){    int ans = 0;    for(int i=0;str[str1][i];i++){        if(str[str1][i]!=str[str2][i]) ans++;    }    return ans;}int prim(int start){    int sum = 0;    for(int i=0;i<n;i++){        Edges[i].len = INF;        Edges[i].st = start;    }    visit[start] = 1;    for(int i=0;i<n-1;i++){        for(int j=0;j<n;j++){            int len = G[start][j];            if(!visit[j]&&len<Edges[j].len){                Edges[j].len = len;                Edges[j].st = start;            }        }        int Min = INF;        int Min_ed;        for(int j=0;j<n;j++){            if(!visit[j]&&Edges[j].len<Min){                Min = Edges[j].len;                Min_ed = j;            }        }        start = Min_ed;        visit[start] = 1;        sum+=Min;    }    return sum;}int main(){    while(cin>>n&&n){        for(int i=0;i<n;i++){            visit[i] = 0;        }        for(int i=0;i<n;i++){            scanf("%s",str[i]);        }        for(int i=0;i<n;i++){            for(int j=0;j<n;j++){                G[i][j] = check(i,j);            }        }        int ans = prim(0);        cout<<"The highest possible quality is 1/"<<ans<<"."<<endl;    }    return 0;}
0 0
原创粉丝点击