题目来源:北京大学POJ http://poj.org/problem?id=1979
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
这个题目可以用回溯法解决,跟我博客里面的“贪吃蛇游戏”有些类似,见代码:
// RedAndBlack.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <string.h> char matrix[20][20]; int path = 0; int rows; int cols; void search(int m, int n) { if (m >= 0 && n >= 0 && m < rows && n < cols && (matrix[m][n] == '@' || matrix[m][n] == '.' ) ) { path++; matrix[m][n] = '0'; search(m,n+1); search(m+1,n); search(m-1,n); search(m,n-1); } } int main() { int i,j,m,n; //freopen("in.txt","r",stdin); while(1) { memset(matrix,'\0',20*20); path = 0; scanf("%d %d\n",&cols,&rows); if (cols == 0) break; for (i = 0; i < rows; i++) for (j = 0; j < cols; j++) { scanf("%c ",&matrix[i][j]); if (matrix[i][j] == '@') { m = i; n = j; } } search(m,n); printf("%d\n",path); } return 0; }