Timus 1298. Knight

来源:互联网 发布:公务员 知乎 编辑:程序博客网 时间:2024/05/18 00:35

原题:Knight

题意:给出n*n的棋盘,用马的方式(走“日”字型),若能不重复地走完每一个格子,那么输出方案

解法:暴力dfs

#include <iostream>using namespace std;int dir[8][2]={2,1,  1,2  ,-1,2   ,-2,1  ,-2,-1   ,-1,-2  ,  1,-2,  2,-1};int f[10][10] = {0}, n;bool flag = false;void dfs(int t, int x, int y) {    if (t >= n*n) {        flag = true; return;    }    for (int k = 0; k < 8; k++) {        int x1 = x+dir[k][0];        int y1 = y+dir[k][1];        if (x1 <= 0 || y1 <= 0 || x1 > n || y1 > n) continue;        if (f[x1][y1] != 0) continue;        f[x1][y1] = t+1;        dfs(t+1, x1, y1);        if (flag) return;        f[x1][y1] = 0;    }}int main() {    cin >> n;    f[1][1] = 1;    dfs(1, 1, 1);    if (!flag) cout << "IMPOSSIBLE\n" << endl;    else {        for (int k = 1; k <= n*n; k++)            for (int i = 1; i <= n; i++)                for (int j = 1; j <= n; j++) if (f[i][j] == k) {                    cout << char('a'+i-1) << j << endl;                }    }}
0 0
原创粉丝点击