求助
  • 板块灌水区
  • 楼主wangqz
  • 当前回复9
  • 已保存回复9
  • 发布时间2022/7/27 09:40
  • 上次更新2023/10/27 18:13:04
查看原帖
求助
530676
wangqz楼主2022/7/27 09:40

题目

过不了

#include<iostream>
using namespace std;
int n,m;
char y[105][105];
int num=0;
void dfs(int i,int j);
int main()
{
    cin>>n>>m;

    //赋值y
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)
			cin>>y[i][j];
	
	//主程序 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		//判断. 
		    if(y[i][j]!='.')
		    {
		    	num++;
		    	dfs(i,j);
			}	
					
	cout<<num;			
	return 0;    
}
void dfs(int i,int j)
{
	y[i][j]='.';
    //判断并递推 (应该是这算法有问题)
	if(y[i-1][j]!='.'&&i-1>=1)
        dfs(i-1,j);
    if(y[i+1][j]!='.'&&i+1<=n)
        dfs(i+1,j);
	if(y[i][j-1]!='.'&&j-1>=1)
		dfs(i,j-1);
	if(y[i][j+1]!='.'&&j+1<=m)
		dfs(i,j+1); 
	if(y[i-1][j-1]!='.'&&i-1>=1&&j-1>=0)
		dfs(i-1,j-1);
	if(y[i-1][j+1]!='.'&&i-1>=1&&j+1<=m)
		dfs(i-1,j+1);
	if(y[i+1][j-1]!='.'&&i+1<=n&&j-1>=0)
	    dfs(i+1,j-1);
	if(y[i+1][j+1]!='.'&&i+1<=n&&j+1<=m)
		dfs(i+1,j+1);
}

但这个能过上面的那个题目

#include<iostream>
using namespace std;
int n,m;
char y[105][105];
int s[105][105];
int num=0;
void dfs(int i,int j);
int main()
{
    cin>>n>>m;
    //??? 
	for(int i=0;i<=100;i++)      
	    for(int j=0;j<=100;j++)
	    	y[i][j]='.';
    
    //??        
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)
			cin>>y[i][j];
	
	/*	
	for(int i=0;i<=100;i++)      
	    for(int j=0;j<=100;j++)  
	    	s[i][j]=y[i][j]-48;  
	*/
	//??? 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		    if(y[i][j]!='.')
		    {
		    	num++;
		    	dfs(i,j);
			}	
	//??		
	cout<<num;		
	
	return 0;    
}
//??? 
void dfs(int i,int j)
{
		y[i][j]='.';

	    if(y[i-1][j]!='.'&&i-1>=1)
            dfs(i-1,j);
        if(y[i+1][j]!='.'&&i+1<=n)
            dfs(i+1,j);
		if(y[i][j-1]!='.'&&j-1>=1)
			dfs(i,j-1);
		if(y[i][j+1]!='.'&&j+1<=m)
		    dfs(i,j+1); 
		if(y[i-1][j-1]!='.'&&i-1>=1&&j-1>=0)
		    dfs(i-1,j-1);
		if(y[i-1][j+1]!='.'&&i-1>=1&&j+1<=m)
		    dfs(i-1,j+1);
		if(y[i+1][j-1]!='.'&&i+1<=n&&j-1>=0)
	      	dfs(i+1,j-1);
		if(y[i+1][j+1]!='.'&&i+1<=n&&j+1<=m)
		    dfs(i+1,j+1);
}

想知道原因。下面的这个程序在这题目测试2 过不了。在这有1个超时,1个运行错误,1个答案错误......

2022/7/27 09:40
加载中...