请帮忙debug
  • 板块灌水区
  • 楼主RegentalBread92
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/6/12 12:25
  • 上次更新2023/11/4 21:59:17
查看原帖
请帮忙debug
410346
RegentalBread92楼主2021/6/12 12:25

第一行数据n,m表示地图的行和列,接下来的n行m列为地图,startx,starty表示小人的起点。

本题可以采用深搜或者广搜,因为边界全为'#',所以本题不用考虑边界问题。

附上代码(请帮忙debug)

#include<bits/stdc++.h>
using namespace std;
int n,m,startx,starty,num=0,maxv=-1,tx,ty;
char arr[35][35];
bool book[35][35];
int js(int x,int y){
    for(int i=x;arr[i][y]!='#';i++)
        if(arr[i][y]=='G')num++;
    for(int i=x;arr[i][y]!='#';i--)
        if(arr[i][y]=='G')num++;
    for(int i=y;arr[x][i]!='#';i++)
        if(arr[x][i]=='G')num++;
    for(int i=y;arr[x][i]!='#';i--)
        if(arr[x][i]=='G')num++;
    return num;
}
void dfs(int x,int y){
    if(arr[x][y]=='#'||arr[x][y]=='G')return ;
    if(!book[x][y]&&arr[x][y]=='.'){
        book[x][y]=true;
        num=js(x,y);
        if(num>maxv){
            maxv=num;
            tx=x;
            ty=y;
        }
        dfs(x+1,y);
        dfs(x-1,y);
        dfs(x,y+1);
        dfs(x,y-1);
    }
}
int main(){
    cin>>n>>m>>startx>>starty;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>arr[i][j];
    dfs(startx,starty);
    cout<<tx<<" "<<ty<<endl<<maxv;
    return 0; 
} 

谢谢dl们

2021/6/12 12:25
加载中...