过不了
#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个答案错误......