2021.8.14提高B组模拟6T4 + P7555 [USACO21OPEN] Maze Tac Toe (dfs)
Posted SSL_LKJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.14提高B组模拟6T4 + P7555 [USACO21OPEN] Maze Tac Toe (dfs)相关的知识,希望对你有一定的参考价值。
Maze Tac Toe
解题思路
暴力dfs
存储编号
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
struct node
{
int num,x,y;
}map[30][30];
int n,ans,px,py,b[20005],f[5][5],c[30][30][20005];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
string s;
int getsum()//求编号
{
int sum=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
sum=sum*3+f[i][j];
return sum;
}
bool pd()//判断是否可行
{
for(int i=1;i<=3;i++)
{
if(f[i][1]==2&&f[i][2]==1&&f[i][3]==1)return true;
if(f[i][1]==1&&f[i][2]==1&&f[i][3]==2)return true;
if(f[1][i]==2&&f[2][i]==1&&f[3][i]==1)return true;
if(f[1][i]==1&&f[2][i]==1&&f[3][i]==2)return true;
}
if(f[1][1]==2&&f[2][2]==1&&f[3][3]==1)return true;
if(f[1][1]==1&&f[2][2]==1&&f[3][3]==2)return true;
if(f[1][3]==2&&f[2][2]==1&&f[3][1]==1)return true;
if(f[1][3]==1&&f[2][2]==1&&f[3][1]==2)return true;
return false;
}
bool check(int x,int y)//判断
{
if(x>=1&&x<=n&&y>=1&&y<=n)return true;
return false;
}
void dfs(int x,int y)
{
int z=getsum();//求z
if(c[x][y][z])return;//记忆化
c[x][y][z]=1;
if(!b[z])
{
if(pd())
{
b[z]=1;
ans++;
return;
}
}
else return;
for(int i=0;i<4;i++)
{
int xx=dx[i]+x,yy=dy[i]+y;
if(check(xx,yy))
if(map[xx][yy].num!=0)
{
int ox=map[xx][yy].x,oy=map[xx][yy].y;
int last=f[ox][oy];//存储
if(map[xx][yy].num!=1)
if(!f[ox][oy])f[ox][oy]=map[xx][yy].num-1;
dfs(xx,yy);//dfs
f[ox][oy]=last;
}
}
return;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)//将图缩小
{
cin>>s;
for(int j=0;j<3*n;j+=3)
if(s[j]!='#')
{
if(s[j]=='O')map[i][j/3+1]=(node){2,s[j+1]-48,s[j+2]-48};
else
{
if(s[j]=='M')map[i][j/3+1]=(node){3,s[j+1]-48,s[j+2]-48};
else
{
if(s[j]=='B')px=i,py=j/3+1,map[i][j/3+1].num=1;
else map[i][j/3+1].num=1;
}
}
}
}
dfs(px,py);
printf("%d",ans);
return 0;
}
谢谢
以上是关于2021.8.14提高B组模拟6T4 + P7555 [USACO21OPEN] Maze Tac Toe (dfs)的主要内容,如果未能解决你的问题,请参考以下文章
2021.8.14提高B组模拟6T2 + P7557 [USACO21OPEN] Acowdemia (二分)
2021.8.14提高B组模拟6T2 + P7557 [USACO21OPEN] Acowdemia (二分)
2021.8.14提高B组模拟6T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)
2021.8.14提高B组模拟6T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)