想问下吧u们哪里错了,我是运行时错误,返回了乱值,应该也没有越界访问吧


#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int N,K;
vector<vector<int>>MAP(12,vector<int>(12,20));
vector<vector<int>>PRE(12,vector<int>(12,0));
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
vector<int>arr(1,-1);
bool END=false;
void dfs(int x,int y){
if(END) return;
if(x==N && y==N && (int)arr.size()==N*N){
for(int i=1;i<=N*N-1;i++){
printf("%d",arr[i]);
}
END=true;
return;
}
PRE[x][y]=1;
for(int i=0;i<8;i++){
int a=x+dx[i],b=y+dy[i];
if(a<1 || b<1 || a>N || b>N) continue;
if(MAP[x][y]==K-1){
if(MAP[a][b]!=0) continue;
}else if(MAP[x][y]+1!=MAP[a][b]) continue;
if(i%2!=0){
if(i<=6){
if(PRE[x+dx[i-1]][y+dy[i-1]] && PRE[x+dx[i+1]][y+dy[i+1]]) continue;
}else if(PRE[x+dx[i-1]][y+dy[i-1]] && PRE[x+dx[0]][y+dy[0]]) continue;
}
arr.push_back(i);
dfs(a,b);
if(END) return;
arr.pop_back();
}
PRE[x][y]=0;
}
int main()
{
scanf("%d %d",&N,&K);
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
scanf("%d",&MAP[i][j]);
}
}
dfs(1,1);
if(END==false) printf("-1");
return 0;
}


#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int N,K;
vector<vector<int>>MAP(12,vector<int>(12,20));
vector<vector<int>>PRE(12,vector<int>(12,0));
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
vector<int>arr(1,-1);
bool END=false;
void dfs(int x,int y){
if(END) return;
if(x==N && y==N && (int)arr.size()==N*N){
for(int i=1;i<=N*N-1;i++){
printf("%d",arr[i]);
}
END=true;
return;
}
PRE[x][y]=1;
for(int i=0;i<8;i++){
int a=x+dx[i],b=y+dy[i];
if(a<1 || b<1 || a>N || b>N) continue;
if(MAP[x][y]==K-1){
if(MAP[a][b]!=0) continue;
}else if(MAP[x][y]+1!=MAP[a][b]) continue;
if(i%2!=0){
if(i<=6){
if(PRE[x+dx[i-1]][y+dy[i-1]] && PRE[x+dx[i+1]][y+dy[i+1]]) continue;
}else if(PRE[x+dx[i-1]][y+dy[i-1]] && PRE[x+dx[0]][y+dy[0]]) continue;
}
arr.push_back(i);
dfs(a,b);
if(END) return;
arr.pop_back();
}
PRE[x][y]=0;
}
int main()
{
scanf("%d %d",&N,&K);
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
scanf("%d",&MAP[i][j]);
}
}
dfs(1,1);
if(END==false) printf("-1");
return 0;
}



