AcWing 5989. 数字接龙-->dfs
原题链接
简单
作者:
YMYS
,
2025-04-04 12:19:52
· 河南
,
所有人可见
,
阅读 30
#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n,k;
int p[N][N];
int w[N][N];
int m[N][N][N][N];
string path;
int dx[8] = {-1,-1,0,1,1,1,0,-1};
int dy[8] = {0,1,1,1,0,-1,-1,-1};
bool dfs(int x,int y){
if(x==n && y==n) return path.size() == n*n-1;
w[x][y] = true;
for(int i=0;i<8;i++){
int xx = x + dx[i];
int yy = y + dy[i];
if(xx<1 || xx>n || yy<1 || yy>n) continue;
if(i%2!=0 && (m[x][yy][xx][y] || m[xx][y][x][yy])) continue;
if(w[xx][yy]) continue;
if(p[xx][yy] != (p[x][y]+1) % k) continue;
m[x][y][xx][yy] = true;
path += i + '0';
if(dfs(xx, yy)) return true;
path.pop_back();
m[x][y][xx][yy] = false;
}
w[x][y] = false;
return false;
}
int main()
{
#ifdef ABC
freopen("D:/daily_Coding/VScode-C&C++-Coding/in.in", "r", stdin);
freopen("D:/daily_Coding/VScode-C&C++-Coding/out.out", "w", stdout);
#endif
cin>>n>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>p[i][j];
}
}
if(!dfs(1,1)) cout<<-1<<endl;
else cout<<path<<endl;
return 0;
}