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;
    }
    

      

  • 相关阅读:
    排序算法——选择排序
    poj1906
    poj1496
    poj1244
    poj1183
    poj1806
    !!!舒尔茨自律神经训练法
    Google Analytics的能与不能
    乔布斯最伟大的贡献是什么
    冥想呼吸
  • 原文地址:https://www.cnblogs.com/passion-sky/p/8516097.html
Copyright © 2011-2022 走看看