大家看看哪错了

tctm31 2023-02-17 19:41:24 2023-02-19 16:24:42 12
#include <bits/stdc++.h>
using namespace std;
int n,m,c=0,l1,l2;
char a[101][101];
int sx[4]={0,0,-1,1};
int sy[4]={-1,1,0,0};
void d(int x,int y){
		c++;
		a[x][y]='#';
	for(int i=0;i<4;i++){
		int xx=x+sx[i];
		int yy=y+sy[i];
		if(xx>=0&&xx<m&&yy>=0&&yy<n&&a[xx][yy]=='.') d(xx,yy);
	    }
}
int main() {
    cin >> n>>m;
	for(int i=0;i<n;i++){
    	for(int j=0;j<m;j++){
    		cin>>a[i][j];
    		if(a[i][j]=='@'){
    			l1=i,l2=j;
			}
		}
	}
	d(l1,l2);
	cout<<c<<endl;
    return 0;
}
{{ vote && vote.total.up }}

共 2 条回复

tctm169 我以逍遥醉人间

#include <bits/stdc++.h> using namespace std; char q[10010][10010]; int n,m; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; int bfs(int x,int y){ int sum=1; q[x][y]='#'; for(int i=0;i<4;i++){ int a=x+dx[i]; int b=y+dy[i]; if(a>=n || a<0 || b>=m || b<0) continue; if(q[a][b]!='.') continue; sum+=bfs(a,b); } return sum; } int main(){ int a,b; while(1){ cin>>m>>n; if(n==0 && m==0){ return 0; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>q[i][j]; if(q[i][j]=='@'){ a=i,b=j; } } } cout<<bfs(a,b)<<endl; } }

root 站长

1、 多组数据输入,你这只能输入一次, 建议使用 while (cin >> n >> m, n != 0 || m != 0)
2、 第二个就是多组数据,c每次需要初始为0;
3、 使用标记数组来记录(x,y) 这个点已经走过,走过的点不能继续走了,每次新的地图,标记数组也要用memset赋初值。
4、 搜索的时候n和m写反了!