dfs之地图染色

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int visit[30];
int mapp[30][30];
int n,m,k;
int cnt;
void dfs(int x)
{

    for(int i=1;i<=n;i++)  //n行
    {

        int flag=1;
        for(int j=1;j<x;j++)    //前x列
            if(mapp[j][x]&&visit[j]==i)     //已经染色
        {
            flag=0;
            break;
        }
        if(flag){
            visit[x]=i;
            if(x==m)  cnt++;
            else dfs(x+1);
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        cnt=0;
        memset(visit,0,sizeof(visit));
        memset(mapp,0,sizeof(mapp));
        scanf("%d",&k);
        int x,y;
        for(int i=0; i<k; i++)
        {
            scanf("%d%d",&x,&y);
            mapp[x][y]=mapp[y][x]=1;
        }
        dfs(1);
        cout<<cnt<<endl;
    }
    return 0;
}

 

posted @ 2016-03-30 16:38  请叫我凯凯大人  阅读(461)  评论(0编辑  收藏  举报