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 (树状数组)

2017.12.09NOIP提高组模拟赛A组

2017.07.16【NOIP提高组】模拟赛B组 卫星照片 题解