cpp
复制代码
#include<vector>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
bool st[15][15];
int n, k;
int g[15][15];
int t[15][15][15][15];
int dx[] = { -1,-1,0,1,1,1,0,-1 };
int dy[] = { 0,1,1,1,0,-1,-1,-1 };
void dfs(int x, int y, vector<int>temp, int num){
if (x == n && y == n && temp.size() == n * n - 1){
for (auto x : temp){
cout << x;
}
exit(0);
}
for (int i = 0; i < 8; i++){
int xx = x + dx[i];
int yy = y + dy[i];
if (xx <= 0 || yy <= 0 || xx > n || yy > n || st[xx][yy]) continue;
if(i%2==1)
{
if(t[xx][y][x][yy]||t[x][yy][xx][y])
continue;
}
if ((num + 1) % k == g[xx][yy])
{
t[x][y][xx][yy]=1;
st[xx][yy] = 1;
temp.push_back(i);
dfs(xx, yy, temp, (num + 1)%k);
t[x][y][xx][yy]=0;
st[xx][yy] = 0;
temp.pop_back();
}
}
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> g[i][j];
}
}
vector<int>ans;
st[1][1] = true;
dfs(1, 1, ans, 0);//坐标,答案,数
cout << -1 << '\n';
return 0;
}