|
花费了近几个小时才写出了这个简单的递归题目! 呵呵,还是菜鸟水平啊, 本题需要注意的就是,递归到深处往某一方向走不了的时候,注意num--,且把字母标记清除! 源代码:
1//============================================================================ 2// Name : poj.cpp 3// Author : 4// Version : 5// Copyright : Your copyright notice 6// Description : DFS, Ansi-style 7//============================================================================ 8#include <iostream> 9using namespace std; 10int a[26] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 11char b[21][21]; 12int ma = 0; 13int num = 0; 14int r,c; 15void Dfs(int x,int y) { 16 if (num > ma) { 17 ma = num; 18 } 19 20 if (x>0 && a[b[x][y]-'A']==0){ 21 a[b[x][y]-'A']=1; 22 num++; 23 Dfs(x-1,y); 24 a[b[x][y]-'A']=0; 25 num--; 26 } 27 if (x<r-1&&a[b[x][y]-'A']==0){ 28 a[b[x][y]-'A']=1; 29 num++; 30 Dfs(x+1,y); 31 a[b[x][y]-'A']=0; 32 num--; 33 } 34 if (y>0&&a[b[x][y]-'A']==0){ 35 a[b[x][y]-'A']=1; 36 num++; 37 Dfs(x,y-1); 38 a[b[x][y]-'A']=0; 39 num--; 40 } 41 if (y<c-1&&a[b[x][y]-'A']==0){ 42 a[b[x][y]-'A']=1; 43 num++; 44 Dfs(x,y+1); 45 a[b[x][y]-'A']=0; 46 num--; 47 } 48 49 50} 51int main() { 52 cin >> r >> c; 53 for (int i = 0;i < r;++i) { 54 for (int j = 0; j < c; ++j) { 55 cin >> b[i][j]; 56 } 57 } 58 59 Dfs(0,0); 60 cout << ma <<endl; 61 return 0; 62} 63
|