这题我们可以用几个循环来做,适合新手,代码如下:
#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[550][550]={2};
int main()
{
int r,c,N,M,sum=0,max=0;
char ch;
cin >> r >> c >> N >> M;//输入长,宽,雄兔,雌兔。
for(int i=1; i<=r; i++)
{
for(int j=1; j<=c; j++)
{
cin >> ch;
if(ch=='F') a[i][j]=1;//如果这个字符为'F',那么a[i][j]为1。(用于后面的判断)
if(ch=='M') a[i][j]=-1;//如果这个字符为'M',那么a[i][j]为0。(用于后面的判断)
}
}
for(int i=1; i<=r; i++)
{
for(int j=1; j<=c; j++)
{
sum=0;//记得,开始要记得设零。
if(a[i][j]==1)//如果它为F
{
for(int k=1; k<=i-1; k++)
{
if(a[k][j]==-1)//如果上面为M
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=i+1; k<=r; k++)
{
if(a[k][j]==-1) //如果下面为M
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=1; k<=j-1; k++)
{
if(a[i][k]==-1) //如果左边为M
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=j+1; k<=c; k++)
{
if(a[i][k]==-1) //如果右边为M
{
sum++;//不能走的路加1
break;//记得跳出
}
}
}
if(a[i][j]==-1) //如果它为M
{
for(int k=1; k<=i-1; k++)
{
if(a[k][j]==1) //如果上面为F
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=i+1; k<=r; k++)
{
if(a[k][j]==1) //如果下面为F
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=1; k<=j-1; k++)
{
if(a[i][k]==1) //如果左为F
{
sum++;//不能走的路加1
break;//记得跳出
}
}
for(int k=j+1; k<=c; k++)
{
if(a[i][k]==1) //如果右边为F
{
sum++;//不能走的路加1
break;//记得跳出
}
}
}
if(4-sum>=3&&a[i][j]!=0)//如果可以走的路大于等于3并且a[i][j]不等于0,那么max加1.
{
max++;
}
}
}
cout << max;//输出
return 0;//养成好习惯
}
此为第二种。
希望有大佬能指点指点,谢谢。