我把这个
memset(rem,0,sizeof rem);
dfs(0,0,0,rem,rem,xx,yy,xxsum,yysum);
改成这样就可以了 为啥
int rem[410],rem2[410];
memset(rem,0,sizeof rem);
memset(rem2,0,sizeof rem2);
dfs(0,0,0,rem,rem2,xx,yy,xxsum,yysum);
后来才发现c++数组作为函数参数时不能拷贝数组,只能传递地址,坑爹啊
```c++
#include <bits/stdc++.h>
using namespace std;
int N;
int xx[25],yy[25],xxsum=0,yysum=0;//xsum ysum为剑的总数
int ans[410];//最终答案
void dfs(int l,int ny,int nx,int rem[410],int r2[410],int x[25],int y[25],int xsum,int ysum){
//l当前循环次数 ny nx 当前位置横纵坐标 rem存储走过的路 r2记录路编号 xy为xy轴上剑数 xysum为剑总数
rem[ny*N+nx]=99;
cout<<ny*N+nx<<"ps:"<<rem[ny*N+nx]<<endl;
r2[l]=ny*N+nx;//记录当前路编号
x[nx]--;//走到此处减少此处的剑
y[ny]--;
xsum--;ysum--;//减少剑的总数
cout<<"<<";
for(int i=0;i<410;i++)
cout<<rem[i]<<" ";
cout<<endl;
cout<<l<<" "<<ny<<" "<<nx<<" "<<rem[r2[l]]<<" r2:"<< r2[l]<<" "<<x[nx]<<" "<<y[ny]<<" "<<xsum<<" "<<ysum<<endl;
int dy[4]={-1,1,0,0},dx[4]={0,0,-1,1};
for(int i=0;i<4;i++){
cout<<"<"<<ny+dy[i]<<" "<<nx+dx[i]<<" "<<x[nx+dx[i]]<<" "<<y[ny+dy[i]]<<" "<<rem[(ny+dy[i])*N+nx+dx[i]]<<" "<<endl;
if(ny+dy[i]>-1 && ny+dy[i]<N && nx+dx[i]>-1 && nx+dx[i]<N && x[nx+dx[i]]!=0 && y[ny+dy[i]]!=0 && rem[(ny+dy[i])*N+nx+dx[i]]==0 )
{//上下左右不能越界 有剑可以走 之前没走过这条路
//cout<<ny+dy[i]<<" "<<nx+dx[i]<<" l:"<<l<<endl;
//rem[(ny+dy[i])*N+nx+dx[i]]=1;//记录走过的路
dfs(l+1,ny+dy[i],nx+dx[i],rem,r2,x,y,xsum,ysum);
}
}
}
int main()
{
// 请在此输入您的代码
cin>>N;
for(int i=0;i<N;i++){
cin>>xx[i];
xxsum+=xx[i];
}
for(int i=0;i<N;i++){
cin>>yy[i];
yysum+=yy[i];
}
int rem[410];
memset(rem,0,sizeof rem);
dfs(0,0,0,rem,rem,xx,yy,xxsum,yysum);
for(int i=0;i<N*N;i++)
cout<<ans[i]<<" ";
return 0;
}
```