当前位置: 代码迷 >> 综合 >> POJ-1979 Red and Bla
  详细解决方案

POJ-1979 Red and Bla

热度:95   发布时间:2023-12-01 22:12:13.0

题目传送门

题目中有如下要求:
1.只能走周围的4个相邻点
2.只能走黑色点,不能走红色点
3.一次只能走一点

需要计算的是:能走到的黑色点的和

因为”.“表示黑色点,所以在下面的DFS函数中需要判断当前点为黑色点才可以进行下一步搜索。

并且下一步走的方向在于下方代码中定义的x[],y[]数组。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
char map[100][100];
bool used[100][100]; 
int x[]={
    1,-1,0,0};
int y[]={
    0,0,1,-1};
int s_x,s_y;
int node_cnt;
void DFS(int node_x,int node_y)
{
    if(node_x<0||node_x>=n||node_y<0||node_y>=m)return ;if(map[node_x][node_y]=='#')return ;node_cnt++;used[node_x][node_y]=true;for(int i=0;i<4;i++){
    if(!used[node_x+x[i]][node_y+y[i]])DFS(node_x+x[i],node_y+y[i]);}
}
int main()
{
    while(scanf("%d%d",&m,&n)&&n&&m){
    memset(used,false,sizeof(used));getchar();for(int i=0;i<n;i++){
    scanf("%s",map[i]);for(int j=0;j<m;j++)if(map[i][j]=='@')s_x=i,s_y=j;}node_cnt=0;DFS(s_x,s_y);printf("%d\n",node_cnt);}return 0;
}