方格填數
(左右、上下、對角都算相鄰)
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。
bool check(int *a,int i)//合理性檢查
{
if (abs(a[i] - a[i - 1]) <=1)return false;//左邊
if (abs(a[i] - a[i - 4]) <= 1) return false;//上邊
if (abs(a[i] - a[i - 3]) <= 1) return false;//左上
return true;
}
#include<iostream>
using namespace std;
int a[11], vis[11];
int count1;
/*採用先將所有的位置設置好,然後將其進行篩選*/
void DFS(int x)
{
if (x>10)//所有方格填數完畢
{
if (abs(a[1] - a[2])>1 && abs(a[1] - a[4])>1 && abs(a[1] - a[5])>1 && abs(a[1] - a[6])>1 &&
abs(a[2] - a[3])>1 && abs(a[2] - a[5])>1 && abs(a[2] - a[6])>1 && abs(a[2] - a[7])>1 &&
abs(a[3] - a[6])>1 && abs(a[3] - a[7])>1 &&
abs(a[4] - a[5])>1 && abs(a[4] - a[8])>1 && abs(a[4] - a[9])>1 &&
abs(a[5] - a[6])>1 && abs(a[5] - a[8])>1 && abs(a[5] - a[9])>1 && abs(a[5] - a[10])>1 &&
abs(a[6] - a[7])>1 && abs(a[6] - a[9])>1 && abs(a[6] - a[10])>1 &&
abs(a[7] - a[10])>1 &&
abs(a[8] - a[9])>1 &&
abs(a[9] - a[10])>1)
{
/*打印輸出每種情況*/
for (int i = 1; i < 11; i++)
cout << a[i] << " ";
cout << endl;
count1++;
}
}
for (int i = 0; i <= 9; i++)
if (vis[i] == 0)
{
vis[i] = 1;//將用過的數標記
a[x] = i;//填數
DFS(x + 1);//對下一個方格繼續填數
vis[i] = 0;//清除標記
}
}
int main()
{
count1 = 0;
DFS(1);
cout << count1 << endl;
return 0;
}