社区讨论
全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 条回复,欢迎继续交流。
正在加载回复...