给个字母矩阵,从左上角开始走,同样的字母不能经过两次,求最长走多少步。好像直接搜就好了,比较水........
#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; }