poj1919--Red and Black (DFS)
思路:题目是很简单的DFS。求出能走到的"."。因此我们完全不需要回溯,只需要遍历下去,每递归一次则结果+1,最后得出答案。
#include<stdio.h> char map[20][20]; int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int m,n; int ans; void dfs(int x,int y){ ans++; //每次递归结果+1 map[x][y]='#'; //将走过的标为不能再走的 for(int i=0;i<4;i++){ if(x+next[i][0]>=0&&x+next[i][0]<m&&y+next[i][1]>=0&&y+next[i][1]<n&&map[x+next[i][0]][y+next[i][1]]=='.'){ dfs(x+next[i][0],y+next[i][1]); } } } int main(){ while(scanf("%d%d",&n,&m)&&m!=0&&n!=0){ ans=0; int tab=0; int x,y; for(int i=0;i<m;i++) scanf("%s",&map[i]); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(map[i][j]=='@') {//找出起始位置 x=i; y=j; tab=1; break; } } if(tab) break; } dfs(x,y); printf("%d\n",ans); } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步