现在的位置: 首页 > 综合 > 正文

poj1154 LETTERS (简单dfs)

2013年08月20日 ⁄ 综合 ⁄ 共 512字 ⁄ 字号 评论关闭

        给个字母矩阵,从左上角开始走,同样的字母不能经过两次,求最长走多少步。好像直接搜就好了,比较水........

#include <stdio.h>

int R,C;
int v[26];
char ch[20][21];

int directions[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

int dfs(int r,int c){
	v[(int)(ch[r][c]-'A')]=1;
	int i,nr,nc,t,vi;
	int mt=0;
	for(i=0;i<4;i++){
		nr=r+directions[i][0];
		nc=c+directions[i][1];
		if(nr>=0&&nr<R&&nc>=0&&nc<C){
			vi=(int)(ch[nr][nc]-'A');
			if(!v[vi]){
				t=dfs(nr,nc);
				mt=t>mt?t:mt;
				v[vi]=0;//回溯
			}
		}
	}
	return mt+1;	
}

int main(void){
	int i;
	scanf("%d %d",&R,&C);
	for(i=0;i<R;i++){
		scanf("%s",ch[i]);
	}
	printf("%d\n",dfs(0,0));
	return 0;
}

抱歉!评论已关闭.