题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002
AC代码(C++):
#include <iostream> #include <queue> #include <string> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; int n; char map[10][10]; int ans; void dfs(int x, int y, int step) { if (y > n) { y = 1; x++; } if (x > n) { if (step > ans)ans = step; return; } if (map[x][y] == 'X') { dfs(x, y + 1, step); return; } bool flag = true; for (int i = x - 1; i >= 1 && map[i][y] != 'X'; i--) { if (map[i][y] == '*') { flag = false; break; } } for (int i = x + 1; i <= n && map[i][y] != 'X'; i++) { if (map[i][y] == '*') { flag = false; break; } } for (int j = y - 1; j >= 1 && map[x][j] != 'X'; j--) { if (map[x][j] == '*') { flag = false; break; } } for (int j = y + 1; j <= n && map[x][j] != 'X'; j++) { if (map[x][j] == '*') { flag = false; break; } } if (flag) { map[x][y] = '*'; dfs(x, y + 1, step + 1); map[x][y] = '.'; } dfs(x, y + 1, step); } int main() { while (cin >> n) { if (n == 0)break; ans = 0; for (int i = 0; i <= n + 1; i++)for (int j = 0; j <= n + 1; j++)map[i][j] = 'X'; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> map[i][j]; } } dfs(1, 1, 0); cout << ans << endl; } //system("pause"); }
总结: 水题, 规模太小怎么搜都不会超时.