AcWing 5989. 数字接龙
原题链接
中等
作者:
噷梢
,
2025-03-31 23:58:03
· 福建
,
所有人可见
,
阅读 8
#include<bits/stdc++.h>
using namespace std;
const int N=12;
int n,m;
int g[N][N];
bool st[N][N],gs[N][N][N][N];
string ans;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
int dfs(int x,int y){
if(x==n-1&&y==n-1){
if(ans.size()==n*n-1)return 1;
else return -1;
}
st[x][y]=true;
for(int i=0;i<8;i++){
int a=x+dx[i],b=y+dy[i];
if(st[a][b])continue;
if(a<0||a>=n||b<0||b>=n)continue;
if(g[a][b]!=(g[x][y]+1)%m)continue;
if(i%2==1&&(gs[x][b][a][y]||gs[a][y][x][b]))continue;
gs[x][y][a][b]=true;
ans+=i+'0';
if(dfs(a,b)==1) return 1;
ans.pop_back();
gs[x][y][a][b]=false;
}
st[x][y]=false;
return -1;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>g[i][j];
}
}
int t=dfs(0,0);
if(t==-1)cout<<-1;
else
cout<<ans;
return 0;
}