• 方格填数




    如下的10个格子

    (如果显示有问题,也可以参看【图1.jpg】)

    填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)

    一共有多少种可能的填数方案?

    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    #include<iostream>
    #include<math.h>
    using namespace std;
    int a[5][5]={20};
    int s=0;
    int vis[10]={0};
    bool check(int num,int x,int y)
    {
    	int i,j;
    	for(i=-1;i<=1;i++)
    	{
    		for(j=-1;j<=1;j++)
    		{
    			int dx=x+i;
    			int dy=y+j;
    			if((dx==1&&dy==1)||(dx==3&&dy==4))continue;
    			if(dx<1||dx>3||dy>4||dy<1)continue;
    			if(dx==x&&dy==y)continue;
    			if(fabs(num-a[dx][dy])<=1)return false;			
    		}
    	}
    	return true;
    }
    void dfs(int x,int y)
    {
    	int i;
    	if(x>3||y>4)return;
    	if(x==3&&y==4)
    	{
    		s++;
    		return;
    	}
    	
    	for(i=0;i<=9;i++)
    	{
    		if(vis[i]==0&&check(i,x,y))
    		{
    			vis[i]=1;
    			//int m=a[x][y];
    			a[x][y]=i;
    			if(y==4){
    		 	dfs(x+1,1);
    			}
    			else dfs(x,y+1);
    			vis[i]=0;
    			a[x][y]=20;
    			//cout<<m<<endl;
    		}		
    	}
    }
    int main()
    {
    	for(int i=0;i<5;i++)
    	for(int j=0;j<5;j++)
    	{
    	cout<<a[i][j];
    	}
    	dfs(1,2);
    	cout<<s<<endl;
    	return 0;
    } 
    

      

  • 相关阅读:
    Linux线程(一)
    模板(一)
    C++基础(八)
    C++基础(七)
    C++基础(六)
    C++基础(五)
    2.C#基础(二)
    1.C#基础(一)
    2.给出距离1900年1月1日的天数,求日期
    网络协议破解 SMTP
  • 原文地址:https://www.cnblogs.com/zhangshuyao/p/8669221.html
Copyright © 2020-2023  润新知