标签:decide case problem direct phi name reg white func
Input
Output
Sample Input
3 1 1 2 3 4 3
Sample Output
Scenario #1: A1 Scenario #2: impossible Scenario #3: A1B3C1A2B4C2A3B1C3A4B2C4
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set> #include<vector> #include<stack> #include<queue> #include<algorithm> #include<cstdio> #include<algorithm> #include<functional> #include<sstream> int n1, n2; int xx[30], yy[30]; int visit[30][30]; int flag; int dir[8][2] = { { -2,-1 },{ -2,1 },{ -1,-2 },{ -1,2 },{ 1,-2 },{ 1,2 },{ 2,-1 },{ 2,1 } }; int go(int x, int y) { if (1 <= x&&x <= n1 && 1 <= y&&y <= n2) return 1; return 0; } void dfs(int x, int y, int num) { int i, xxx, yyy; xx[num] = x; yy[num] = y; if (num == n1*n2) { flag = 1; return; } for (i = 0; i<8; i++) { xxx = x + dir[i][0]; yyy = y + dir[i][1]; if (go(xxx, yyy) && !visit[xxx][yyy] && !flag) { visit[xxx][yyy] = 1; dfs(xxx, yyy, num + 1); visit[xxx][yyy] = 0; } } } int main() { int i, k, t; scanf("%d", &t); for (k = 1; k <= t; k++) { scanf("%d%d", &n2, &n1); memset(visit, 0, sizeof(visit)); visit[1][1] = 1; flag = 0; dfs(1, 1, 1); printf("Scenario #%d:\n", k); if (flag) { for (i = 1; i <= n1*n2; i++) printf("%c%d", xx[i] + ‘A‘ - 1, yy[i]); } else printf("impossible"); printf(k == t ? "\n" : "\n\n"); } return 0; }
标签:decide case problem direct phi name reg white func
原文地址:http://www.cnblogs.com/edych/p/7246868.html