并查集或图floyd-2

来源:互联网 发布:做天猫,淘宝客服怎么样 编辑:程序博客网 时间:2024/05/01 09:02
#include<bits/stdc++.h>using namespace std;const int N=300;int a[N+10][N+10];char str[N+10];int num[N+10];void floyd(int n){   for(int k=1;k<=n;k++)    for(int i=1;i<=n;i++)     for(int j=1;j<=n;j++)       if(a[i][k]&&a[k][j]&&i!=j) a[i][j]=a[j][i]=1;//注意i!=j}int main(){    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++) scanf("%d",&num[i]);    for(int i=1;i<=n;i++)    {        scanf("%s",str+1);        for(int j=1;j<=n;j++)        {            if(str[j]=='1') a[i][j]=1;        }    }    floyd(n);     for(int i=1;i<=n;i++)     {         int minn=num[i],k=i;        for(int j=1;j<=n;j++)        {            if(a[i][j]&&num[j]<minn){minn=num[j];k=j;}        }         int temp=num[i];             num[i]=num[k];             num[k]=temp;        for(int j=i+1;j<=n;j++)  a[j][i]=0;     }     for(int i=1;i<n;i++) printf("%d ",num[i]);printf("%d\n",num[n]);    return 0;}//可以尝试用并查集写,思路比较直接。
New Year Permutation
0 0
原创粉丝点击