Help ! ! ! !
查看原帖
Help ! ! ! !
390568
Twistzz__楼主2023/10/15 22:59

本蒟蒻想问scanf和cin为什么有区别...

以下是代码1

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=0,b[9][2]={{0,1},{0,-1},{1,1},{1,-1},{1,0},{-1,0},{-1,1},{-1,-1}};
char a[102][102];
bool vis[102][102];
void dfs(int x,int y){
	if(x>n || y>m || x<=0 || y<=0 || a[x][y]=='.')return;
	vis[x][y]=true;
	for(int i=0;i<8;i++){
        if(vis[x+b[i][0]][y+b[i][1]]==false)dfs(x+b[i][0],y+b[i][1]);
    }
	return;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%c",&a[i][j]);//cin>>a[i][j];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(vis[i][j]==false && a[i][j]=='W'){
				dfs(i,j);
                cnt++;
			}
		}
	}
	printf("%d",cnt);
	return 0;
} 

似乎只能拿到30Pts

下面的就可以满分

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=0,b[9][2]={{0,1},{0,-1},{1,1},{1,-1},{1,0},{-1,0},{-1,1},{-1,-1}};
char a[101][101];
bool vis[101][101];
void dfs(int x,int y){
	if(x>n || y>m || x<=0 || y<=0 || vis[x][y] || a[x][y]=='.')return;
	vis[x][y]=true;
	for(int i=0;i<8;i++)dfs(x+b[i][0],y+b[i][1]);
	return;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(!vis[i][j] && a[i][j]=='W'){
				cnt++;
				dfs(i,j);
			}
		}
	}
	printf("%d",cnt);
	return 0;
} 

so why !?

2023/10/15 22:59
加载中...