这道题我们只用四个循环就可以了,代码如下:
#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[550][550];
int main()
{
int r,c,n,m;
cin >> r >>c >> n >> m;//输入长,宽,雄兔,雌兔。
char ch;
int sum=0;//设个sum变量
bool boo,bo;//定两个bool类型。
for(int i=1; i<=r; i++)//初始我们进行判断,是否为'F'或 'M'。
{
for(int j=1; j<=c; j++)
{
cin >> ch;//重复执行输入
if(ch=='F')
{
a[i][j]=-5; //因为后面要加减,如果a[i][j]为'F',那么给a[i][j]定个值。
}
if(ch=='M')
{
a[i][j]=5; //同样,因为后面要加减,如果a[i][j]为'M',那么给a[i][j]定个值。
}
}
}
for(int i=1;i<=r;i++)
{
boo=0;//初始设为0。
bo=0;
for(int j=1;j<=c;j++)
{
if(a[i][j]>0) boo=1;
if(a[i][j]<0) bo=1;
if(boo==1&&a[i][j]<0) a[i][j]++;//如果a[i][j]为'M'那么a[i][j]的数量+1。
if(bo==1&&a[i][j]>0) a[i][j]--;//如果a[i][j]为'F'那么a[i][j]的数量-1。
}
}
for(int i=1; i<=r; i++)
{
boo=0;//初始设为0。
bo=0;
for(int j=c; j>=1; j--)
{
if(a[i][j]>0) boo=1;
if(a[i][j]<0) bo=1;
if(a[i][j]>0&&bo==1) a[i][j]--;//如果a[i][j]为'F'那么a[i][j]的数量-1。
if(a[i][j]<0&&boo==1) a[i][j]++;//如果a[i][j]为'M'那么a[i][j]的数量+1
}
}
for(int j=1; j<=c; j++)
{
boo=0;
bo=0;
for(int i=1; i<=r; i++)
{
if(a[i][j]>0) boo=1;
if(a[i][j]<0) bo=1;
if(a[i][j]>0&&bo==1) a[i][j]--;//如果a[i][j]为'F'那么a[i][j]的数量-1。
if(a[i][j]<0&&boo==1) a[i][j]++;//如果a[i][j]为'M'那么a[i][j]的数量+1
}
}
for(int j=1; j<=c; j++)
{
boo=0;
bo=0;
for(int i=r; i>=1; i--)
{
if(a[i][j]>0) boo=1;
if(a[i][j]<0) bo=1;
if(a[i][j]>0&&bo==1) a[i][j]--;//如果a[i][j]为'F'那么a[i][j]的数量-1。
if(a[i][j]<0&&boo==1) a[i][j]++;//如果a[i][j]为'M'那么a[i][j]的数量+1
}
}
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
if(a[i][j]==-5||a[i][j]==-4||a[i][j]==4||a[i][j]==5)
sum++;//如果这只兔子的不能走路线为0或为1,输出
}
}
cout << sum;
}
//此为第一种方法。
//第二种方法网址(注意,第二种方法适合新手些):洛谷B3818 [语言月赛 202308] 电脑中了满屏粉兔病毒第二种-CSDN博客
希望有大佬能指点指点,谢谢