|
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <cstdlib>
- #include <algorithm>
- #include <queue>
- #include <stack>
- using namespace std;
- int a[10][10],book[20],all=0;
- void dfs(int x,int y,int num)
- {
- if(y==4)
- y=1,x++;
- else
- y++;
- if(x==1&&y==4)
- {
- a[1][4]=34-a[1][1]-a[1][2]-a[1][3];
- if(a[1][4]<=0||a[x][y]>16||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==2&&y==2)
- {
- a[2][2]=34-a[1][1]-a[1][2]-a[2][1];
- if(a[2][2]<=0||a[x][y]>16||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==2&&y==4)
- {
- a[2][4]=34-a[2][1]-a[2][2]-a[2][3];
- if(a[2][4]<=0||a[x][y]>16||a[2][4]!=34-a[1][3]-a[1][4]-a[2][3]||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==3&&y==3)
- {
- a[3][3]=34-a[3][2]-a[2][2]-a[2][3];
- if(a[3][3]<=0||a[x][y]>16||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==3&&y==4)
- {
- a[3][4]=34-a[3][1]-a[3][2]-a[3][3];
- if(a[3][4]<=0||a[x][y]>16||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==4&&y==1)
- {
- a[4][1]=34-a[1][1]-a[2][1]-a[3][1];
- if(a[4][1]<=0||a[x][y]>16||book[a[x][y]]||a[4][1]!=34-a[1][4]-a[2][3]-a[3][2])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==4&&y==2)
- {
- a[4][2]=34-a[1][2]-a[2][2]-a[3][2];
- if(a[4][2]<=0||a[x][y]>16||a[4][2]!=34-a[3][1]-a[3][2]-a[4][1]||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==4&&y==3)
- {
- a[4][3]=34-a[1][3]-a[2][3]-a[3][3];
- if(a[4][3]<=0||a[x][y]>16||book[a[x][y]])
- return;
- book[a[x][y]]=1;
- dfs(x,y,a[x][y]);
- book[a[x][y]]=0;
- }
- else if(x==4&&y==4)
- {
- a[4][4]=34-a[1][4]-a[2][4]-a[3][4];
- if(a[4][4]<=0||a[x][y]>16||book[a[x][y]]||a[4][4]!=34-a[3][3]-a[3][4]-a[4][3]||a[4][4]!=34-a[4][1]-a[4][2]-a[4][3]||a[4][4]!=34-a[1][1]-a[2][2]-a[3][3])
- return;
- for(int i=1;i<=4;i++)
- {
- for(int j=1;j<=4;j++)
- printf("%2d ",a[i][j]);
- printf("\n");
- }
- printf("\n---------------\n");
- all++;
- }
- else
- {
- for(int i=1;i<=16;i++)
- if(!book[i])
- {
- book[i]=1;
- a[x][y]=i;
- dfs(x,y,i);
- book[i]=0;
- }
- }
- }
- int main()
- {
- freopen("11.txt","w",stdout);
- for(int i=1;i<=16;i++)
- {
- book[i]=1;
- a[1][1]=i;
- dfs(1,1,i);
- book[i]=0;
- }
- printf("\n%d",all);
- return 0;
- }
复制代码 |
|