社区讨论

全wa求助

P1683入门参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m44z96u0
此快照首次捕获于
2024/12/01 10:23
去年
此快照最后确认于
2025/11/04 13:32
4 个月前
查看原帖
我认为是没什么问题的,写完发现与某篇题解类似,但他是c++我是c
C
//存地图 转弯 怎么走 瓷砖计数问题(不能重复计数

#include<stdio.h>
int n,m;//n行m列
char g[30][30];
int res=0;//瓷砖数
int st[30][30];//记录是否走过
//坐标x,y
//计算机的坐标系不一样,根据数组存储来 x朝下,y朝右
//最好顺序上右下左
int dx[4]={-1,0,1,0};//上右下左顺序xy存储
int dy[4]={0,1,0,-1};

void dfs(int x, int y){
for(int i=0;i<4;i++){
    int a=x+dx[i],b=y+dy[i];

    if(a<0||a>=n||b<0||b>=m)continue;//不出界
    if(g[a][b]!='.')continue;
    if(st[a][b]) continue;
//走(a,b)这个点
st[a][b]=1;
res++;
    dfs(a,b);
//st[a][b]=0;
}

}




int main(){
scanf("%d %d",&m,&n);
for(int i=0;i<n;i++){
    for(int j=0;j<m;j++)
scanf("%c",&g[i][j]);//二维数组无需&
}


for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        if(g[i][j]=='@'){
            st[i][j]=1;
            dfs(i,j);
        }
    }
}
res++;//开头也要算,dfs从下一步起
printf("%d\n",res);
return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...