📄 gupai.cpp
字号:
#include<iostream.h>
int a[56]={6,6,2,6,5,2,4,1,1,3,2,0,1,0,3,4,1,3,2,4,6,6,5,4,1,0,4,3,2,1,1,2,5,1,3,6,0,4,5,5,5,5,4,0,2,6,0,3,6,0,5,3,4,2,0,3};;//用于存放骨牌矩阵
int b[56]={0};//记录编号矩阵
int num[7][7];//骨牌数值
int c[30]={0};
int flag;
void readdata(){
num[0][0]=1;
num[0][1]=2;
num[0][2]=3;
num[0][3]=4;
num[0][4]=5;
num[0][5]=6;
num[0][6]=7;
num[1][1]=8;
num[1][2]=9;
num[1][3]=10;
num[1][4]=11;
num[1][5]=12;
num[1][6]=13;
num[2][2]=14;
num[2][3]=15;
num[2][4]=16;
num[2][5]=17;
num[2][6]=18;
num[3][3]=19;
num[3][4]=20;
num[3][5]=21;
num[3][6]=22;
num[4][4]=23;
num[4][5]=24;
num[4][6]=25;
num[5][5]=26;
num[5][6]=27;
num[6][6]=28;
num[1][0]=2;
num[2][0]=3;
num[3][0]=4;
num[4][0]=5;
num[5][0]=6;
num[6][0]=7;
num[2][1]=9;
num[3][1]=10;
num[4][1]=11;
num[5][1]=12;
num[6][1]=13;
num[3][2]=15;
num[4][2]=16;
num[5][2]=17;
num[6][2]=18;
num[4][3]=20;
num[5][3]=21;
num[6][3]=22;
num[5][4]=24;
num[6][4]=25;
num[6][5]=27;
}
void printresult(){
for(int i=0;i<7;i++){
for(int j=0;j<8;j++){
cout<<b[i*8+j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
void search(int n){
while(b[n]!=0){
n++; }
if(n>=56)
{ printresult(); }//找到一组解
else {/*
6 6 2 6 5 2 4 1 28 28 14 7 17 17 11 11
1 3 2 0 1 0 3 4 10 10 14 7 2 2 21 23
1 3 2 4 6 6 5 4 8 4 16 25 25 13 21 23
1 0 4 3 2 1 1 2 8 4 16 15 15 13 9 9
5 1 3 6 0 4 5 5 12 12 22 22 5 5 26 26
5 5 4 0 2 6 0 3 27 24 24 3 3 18 1 19
6 0 5 3 4 2 0 3 27 6 6 20 20 18 1 19
*/
//放置 //往右放
if(n%8<7&&c[num[a[n]][a[n+1]]]==0&&b[n+1]==0){
b[n]=b[n+1]=num[a[n]][a[n+1]];
c[b[n]]=1;
search(n+2);
c[b[n]]=0;
b[n]=b[n+1]=0;
}
if(n/8<7&&c[num[a[n]][a[n+8]]]==0){
b[n]=b[n+8]=num[a[n]][a[n+8]];
c[b[n]]=1;
search(n+1);
c[b[n]]=0;
b[n]=b[n+8]=0;
}
}
}
void main(){
readdata();
search(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -