poj1979
一、题意:一个矩形区域,有H*W个单元格,每个单元格为红色或者黑色,一个人初始在一个黑色单元格上,他可以朝着上下左右四个方向走,但只能走黑色的单元格,求这个人最多可以走多少个单元格
二、思路:简单dfs,遍历即可。
三、源码:
#include"iostream" #include"stdio.h" using namespace std; const int MAXN=25; char room[MAXN][MAXN]; int n,m,sum; bool IsEdge( int x, int y) { if (x>=0&&x<m&&y>=0&&y<n) return true ; return false ; } bool IsBlack( int x, int y) { if (room[x][y]== '.' ) return true ; return false ; } void Dfs( int x, int y) { int dir[8]={0,-1,0,1,-1,0,1,0}; for ( int i=0;i<8;i+=2) { int dx=x+dir[i]; int dy=y+dir[i+1]; if (IsEdge(dx,dy)&&IsBlack(dx,dy)) { sum++; room[dx][dy]= '#' ; Dfs(dx,dy); } } } int main() { int sx,sy; while (cin>>n>>m,n&&m) { //input for ( int i=0;i<m;i++) { for ( int j=0;j<n;j++) { cin>>room[i][j]; if (room[i][j]== '@' ) { sx=i;sy=j; } } } sum=1; Dfs(sx,sy); cout<<sum<<endl; } return 0; } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步