zoukankan      html  css  js  c++  java
  • 01蓝桥杯第七届 方格填数(dfs)

     

    方格填数

    如下的10个格子 
    +–+–+–+–+ 
    | # | ? | ? | ? | 
    +–+–+–+–+ 
    | ? | ? | ? | ? | 
    +–+–+–+–+ 
    | ? | ? | ? | # | 
    +–+–+–+–+

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

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

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

    #include<iostream>
    #include <algorithm>  
    //#include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    bool check()
    {
    	if (abs(a[0] - a[1]) == 1 || abs(a[1] - a[2]) == 1)return false;
    	if (abs(a[3] - a[4]) == 1 || abs(a[4] - a[5]) == 1 || abs(a[5] - a[6]) == 1)return false;
    	if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1)return false;
    	if (abs(a[3] - a[0]) == 1)return false;
    	if (abs(a[1] - a[4]) == 1 || abs(a[4] - a[7]) == 1)return false;
    	if (abs(a[2] - a[5]) == 1 || abs(a[5] - a[8]) == 1)return false;
    	if (abs(a[6] - a[9]) == 1)return false;
    	if (abs(a[3] - a[8]) == 1)return false;
    	if (abs(a[4] - a[9]) == 1)return false;
    	if (abs(a[0] - a[5]) == 1 || abs(a[1] - a[6]) == 1)return false;
    	if (abs(a[3] - a[7]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[4] - a[8]) == 1)return false;
    	if (abs(a[1] - a[5]) == 1 || abs(a[9] - a[5]) == 1 || abs(a[2] - a[6]) == 1)return false;
    	return true;
    }
    int main()
    {
    	
    	int ans = 0;
    	do {
    		if (check())
    			ans++;
    	} //while (next_permutation(a, a + 10));
    	while (next_permutation(a, a + 10));
    	cout << ans;
    }
    

      

  • 相关阅读:
    进程间通讯,线程间通讯
    进程与线程
    学习自测6.0
    学习自测5.0
    学习自测4.0
    学习自测3.0
    学习自测2.0
    学习自测1.0
    PS中怎么复制某个图层的效果?
    初学前端犯下的错误(用于反省)
  • 原文地址:https://www.cnblogs.com/passion-sky/p/8516097.html
Copyright © 2011-2022 走看看