RT,这题我调了几个小时了,可是第二十六个测试点总是过不去,求大佬帮忙改正
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,ans=1,sum=0,sum2=1,dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
bool flag=true,a[1005][1005]={false};
char b[1005][1005];
void dfs(int x,int y)
{
int num=0;
for(int i=0;i<=3;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&b[nx][ny]=='O')num++;
}
if(num==1)sum++;
if(num>=3)
{
flag=false;
}
for(int i=0;i<=3;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&b[nx][ny]=='O'&&a[nx][ny]==false)
{
sum2++;
a[nx][ny]=true;
dfs(nx,ny);
}
}
return;
}
int main()
{
cin>>n>>m>>k;
k=k%998244353;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>b[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==false&&b[i][j]=='O')
{
sum=0;
sum2=1;
flag=true;
a[i][j]=true;
int num=0;
for(int l=0;l<=3;l++)
{
int nx=dx[l]+i,ny=dy[l]+j;
if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&b[nx][ny]=='O')num++;
}
if(num==0)ans=ans*k%998244353;
else if(num<3)
{
dfs(i,j);
if(flag==true&&sum==2)
{
long long s=k;
for(int i=1;i<sum2;i++)
{
s*=(k-1);
s%=998244353;
}
ans=ans*s%998244353;
}
}
}
}
}
if(k%998244353==0||k%998244353==1)cout<<0;
else if(ans==1)cout<<0;
else cout<<ans;
return 0;
}