poj——1789(图论之最小生成树的简单应用)

来源:互联网 发布:word转jpg软件 编辑:程序博客网 时间:2024/06/03 05:40

题目地址:http://poj.org/problem?id=1789

图论(最短路、最小生成树)部分小结的地址:http://www.cnblogs.com/aiyelinglong/archive/2012/03/26/2418707.html

小结:现在才知道原来prime和dijkstra只有很小一部分不一样。

#include <iostream>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;typedef long long ll;#define INF 0xfffffff#define MAX(a,b) a>b?a:b#define MIN(a,b) a>b?b:a#define N 2005char s[N][10];short int map[N][N];short int visited[N];int pos[N];int n;void prime(int st){memset(visited,0,sizeof(visited));visited[st]=1;for(int i=0;i<n;i++){pos[i]=map[st][i];}int minn,next,sum=0,j;for(int i=1;i<n;i++){minn=INF;for(j=0;j<n;j++){if(!visited[j]&&pos[j]<minn){next=j;minn=pos[j];}}visited[next]=j;sum+=minn;for(int j=0;j<n;j++){if(!visited[j]&&map[next][j]<pos[j]){pos[j]=map[next][j];}}}printf("The highest possible quality is 1/%d.\n",sum);//cout<<sum<<endl;}int main(){        int i,j,k,t;        int m,num,count;        while(scanf("%d",&n)!=-1&&n){        cin>>s[0];        for(i=1;i<n;i++){        cin>>s[i];        for(j=0;j<i;j++){        count=0;        for(k=0;k<7;k++){        if(s[i][k]!=s[j][k]) count++;        }        map[i][j]=count;        map[j][i]=count;        }        }        prime(0);        }        return 0;}


原创粉丝点击