首页 > 其他 > 详细

codevs1116

时间:2015-04-06 11:15:02      阅读:102      评论:0      收藏:0      [点我收藏+]

题目连接:http://codevs.cn/problem/1116/

这道题也是一道深搜的题   思路就是从第一个点开始搜索然后进行判断看这个颜色能不能添如果能添就继续下一个点   一样解释在代码中写了很多 下面看代码

#include<stdio.h>
#include<string.h>
int n;
struct node
{
    int num;     //这个是看这个点是第几个点
    int color;   //看这个点用的什么颜色
}a[10];
int mark[10][10]; //看哪个点和哪个点不能填一样的
int sum = 0;    //记录方法的数量

void dfs(int x,int y)
{
    if(x > y)
    {
        sum++;
        return ;
    }
    else
    {

    }
    for(int i = 1;i <= 4;i++)
    {
        int flag = 0;
        for(int j = 1;j <= y;j++)
        {
            if(mark[j][x] == 1&&i == a[j].color)   //判断这个颜色能不能填
                {
                    flag = 1;
                    break;
                }
        }
        if(flag == 1)
        {
            continue;
        }
        else
        {
            a[x].color = i;
            dfs(x + 1,y);
            a[x].color = 0;  //这个地方别忘了 不然就会没有几种方法
        }
    }

}

int main()

{
    scanf("%d",&n);
    for(int i = 0;i <= 10;i++)
    {
        a[i].num = i;
        a[i].color = 0;
    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            scanf("%d",&mark[i][j]);
           // printf("%d ",mark[i][j]);
        }
    }
    dfs(1,n);
    printf("%d\n",sum);
}

 

codevs1116

原文:http://www.cnblogs.com/zhanyage110/p/4395523.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!