#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e7+5;
const int mod=1e9+7;
int n,m,k;
int mp[15][10005],f[15][10005];
typedef struct{int l,r;}node;
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
memset(mp,0,sizeof(mp));
int a,b,c,d,ni,nj,i,j,res=0;
while(k--&&scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
if(a==c)
mp[a][b]=mp[c][d]=2;
else
mp[a][b]=mp[c][d]=1;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
if(!mp[i][j])
break;
if(j<=m)
break;
}
memset(f,0,sizeof(f));
queue<node> que;
node tp;
tp.l=i;
tp.r=j;
f[i][j]=1;
que.push(tp);
while(que.size())
{
tp=que.front();
que.pop();
if(tp.l-2>0&&mp[tp.l-2][tp.r]==1&&!f[tp.l-2][tp.r])
{
f[tp.l-2][tp.r]=1;
node tpp=tp;
tpp.l=tp.l-2;
que.push(tpp);
res++;
}
if(tp.l+2<=n&&mp[tp.l+2][tp.r]==1&&!f[tp.l+2][tp.r])
{
f[tp.l+2][tp.r]=1;
node tpp=tp;
tpp.l=tp.l+2;
que.push(tpp);
res++;
}
if(tp.r-2>0&&mp[tp.l][tp.r-2]==2&&!f[tp.l][tp.r-2])
{
f[tp.l][tp.r-2]=1;
node tpp=tp;
tpp.r=tp.r-2;
que.push(tpp);
res++;
}
if(tp.r+2<=m&&mp[tp.l][tp.r+2]==2&&!f[tp.l][tp.r+2])
{
f[tp.l][tp.r+2]=1;
node tpp=tp;
tpp.r=tp.r+2;
que.push(tpp);
res++;
}
res%=mod;
}
printf("%d\n",res);
}
return 0;
}
第九届山东省ACM省赛H题 bfs
最新推荐文章于 2021-05-31 19:52:52 发布