蓝桥杯方格分割 dfs 方格填数暴力出奇迹

 

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include<string.h>     
#include<algorithm>
#define ll long long
#include<vector>
#define hengheng main ()
const int maxx=1e7+10;
using namespace std;
int sum=0;
int a[7][7]={0};
void dfs(int i,int j)
{
	if(a[i][j]==1) return ;// 已经走过
	
	if(i==0||i==6||j==0||j==6)
	{
		sum++;
		a[i][j]=0; //  能走出来,然后把此值更新为0 
		return ; // 走出来必须结束,不然就卡死了,很烦~ 
	 } 
	 a[i][j]=1;  // 走过此地
	 a[6-i][6-j]=1;   // 与其中心对称的地方也就不能走了 ,, 因为要对称 (核心)!!!! 
	 
	dfs(i+1,j);
	dfs(i,j+1);  // 四个方向 
	dfs(i,j-1);
	dfs(i-1,j); 
	 a[i][j]=0;  //  
	 
	 a[6-i][6-j]=0;
}

int main()
{
	int j,i,k=0,n,m,t=0,x;
	dfs(3,3);
	printf("%d\n",sum/4); // 除4 因为左右对称一次,旋转对称一次,真的很烦,脑袋呆~ 
	
    return 0;
}

方格填数

这个题怎么说呢,暴力出奇迹,,,

我二话不说直接十层for

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include<string.h>     
#include<algorithm>
#define ll long long
#include<vector>
#define hengheng main ()
const int maxx=1e5+10;
using namespace std;

int main()
{
	int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
	int sum=0;
	for(a5=1;a5<=10;a5++)
	{
		for(a6=1;a6<=10;a6++)
		if(a5!=a6&&(abs(a5-a6)!=1))
		{
			for(a2=1;a2<=10;a2++)
			if(a2!=a5&&a2!=a6&&(abs(a5-a2)!=1)&&(abs(a2-a6)!=1))
			{
				for(a9=1;a9<=10;a9++)
				{
					if(a9!=a5&&a9!=a6&&a9!=a2&&(abs(a5-a9)!=1)&&(abs(a9-a6)!=1))
					{
						for(a1=1;a1<=10;a1++)
						if(a1!=a5&&a1!=a6&&a1!=a2&&a1!=a9&&(abs(a5-a1)!=1)&&(abs(a1-a6)!=1)&&(abs(a2-a1)!=1))
						{
							for(a10=1;a10<=10;a10++)
							if(a10!=a2&&a10!=a5&&a10!=a6&&a10!=a2&&a10!=a9&&a10!=a1&&(abs(a5-a10)!=1)&&(abs(a10-a6)!=1)&&(abs(a10-a9)!=1))
							{
								for(a4=1;a4<=10;a4++)
								if(a4!=a2&&a4!=a5&&a4!=a6&&a4!=a2&&a4!=a9&&a4!=a1&&a4!=a10&&(abs(a4-a1)!=1)&&(abs(a4-a5)!=1)&&(abs(a4-a9)!=1))
								{
									for(a7=1;a7<=10;a7++)
									if(a7!=a2&&a7!=a5&&a7!=a6&&a7!=a2&&a7!=a9&&a7!=a1&&a7!=a10&&a7!=a4&&(abs(a7-a2)!=1)&&(abs(a7-a6)!=1)&&(abs(a7-a10)!=1))
									{
										for(a3=1;a3<=10;a3++)
										if(a3!=a2&&a3!=a5&&a3!=a6&&a3!=a2&&a3!=a9&&a3!=a1&&a3!=a10&&a3!=a4&&a3!=a7&&(abs(a3-a2)!=1)&&(abs(a3-a6)!=1)&&(abs(a3-a7)!=1))
										{
											for(a8=1;a8<=10;a8++)
											if(a8!=a2&&a8!=a5&&a8!=a6&&a8!=a2&&a8!=a9&&a8!=a1&&a8!=a10&&a8!=a4&&a8!=a7&&a8!=a3&&(abs(a8-a4)!=1)&&(abs(a8-a5)!=1)&&(abs(a8-a9)!=1))
											sum++;
										}
									}
								}
							}
						}
					}
				}
			}
			
		}
	}
	printf("%d\n",sum);
	return 0;
}

开心的像个200斤的孩子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值