#include <iostream>
#include <vector>
#include <stdlib.h>
#include<algorithm>
using namespace std;
const int max1=20;
//数组定义存放数据
int row[max1]={0},column[max1]={0};
int cord[max1][max1],init[max1][max1];
int n,i,j;
void init1()
{
int cent=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
init[i][j]=cent++;
}
}
}
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
vector <int> print;
//判断到达终点后坐标值是否都清零
bool check()
{
for(i=0;i<n;i++)
{
if(row[i]) return false;
}
for(i=0;i<n;i++)
{
if(column[i]) return false;
}
return true;
}
int judge1()//判断是否到终点
{
if(check())
{
for(i=0;i<print.size();i++)
{
cout<<print[i]<<" ";
}
return 1;
}
else
{
return 0;
}
}
int judge2(int fx,int fy)//判断是否可以前进
{
if(fx<0||fx>n-1||fy<0||fy>n-1)
{
return 0;
}
if(cord[fx][fy]==1)
{
return 0;
}
if(row[fx]<=0||column[fy]<=0)
{
return 0;
}
return 1;
}
void dfs(int x,int y)
{
int fx,fy;
if(x==n-1&&y==n-1)
{
if(judge1())
{
exit(0);
}
else
{
return ;
}
}
for(i=0;i<4;i++)
{
fx=x+dx[i];
fy=y+dy[i];
row[fx]--,column[fy]--;
if(judge2(fx,fy)==0)
{
continue;
}
cord[fx][fy]=1;
print.push_back(init[fx][fy]);
dfs(fx,fy);
row[fx]++,column[fy]++;
cord[fx][fy]=0;
print.pop_back();
}
}
int main()
{
cin>>n;
init1();
for(i=0;i<n;i++)
{
cin>>row[i];
}
for(i=0;i<n;i++)
{
cin>>column[i];
}
row[0]--,column[0]--;
cord[0][0]=1;
print.push_back(0);
dfs(0,0);
return 0;
}
代码不能执行到x=n-1和y=n-1,为什么啊啊啊啊啊????