【PAT-一道看着很难的水题】L2-023. 图着色问题

水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就OK了!

代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<map>
#define maxn 400000
#define  inf 0x3f3f3f3f  //l2-023;
using namespace std;
int n,m,k;
#define N 505
int a[N][N];//邻接矩阵

int main(){

    while(scanf("%d%d%d",&n,&m,&k)!=EOF){
        memset(a,0,sizeof(a));
        int s,d;
        for(int i=1;i<=m;i++){
            scanf("%d%d",&s,&d);
            a[s][d]=a[d][s]=1;
        }
        int q,c;
        scanf("%d",&q);

        while(q--){

            int num=n,vis[N]={0},color[N]={0};//判断颜色种类数是否超过K
            for(int i=1;i<=n;i++){
                scanf("%d",&c);
                vis[c]++;
                if(vis[c]>1)num--;
                color[i]=c;
            }

            if(num!=k){//第一次写的是num>k —— WA了一个样例!
                printf("No
");
            }else{
                int flag=0;
                for(int i=1;i<=n&&!flag;i++){
                    for(int j=1;j<=n&&!flag;j++){
                        if(i!=j&&a[i][j]==1){
                            if(color[i]==color[j]){
                                flag=1;break;
                            }
                        }
                    }
                }
                if(flag)printf("No
");
                else printf("Yes
");
            }
        }
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/zhazhaacmer/p/8545282.html