Statues(三维bfs)

In this task Anna and Maria play a game with a very unpleasant rival. Anna and Maria are in the opposite squares of a chessboard (8 × 8): Anna is in the upper right corner, and Maria is in the lower left one. Apart from them, the board has several statues. Each statue occupies exactly one square. A square that contains a statue cannot have anything or anyone — neither any other statues, nor Anna, nor Maria.

Anna is present on the board as a figurant (she stands still and never moves), and Maria has been actively involved in the game. Her goal is — to come to Anna’s square. Maria and statues move in turn, Maria moves first. During one move Maria can go to any adjacent on the side or diagonal cell in which there is no statue, or she can stay in the cell where she is. The statues during their move must go one square down simultaneously, and those statues that were in the bottom row fall from the board and are no longer appeared.

At that moment, when one of the statues is in the cell in which the Maria is, the statues are declared winners. At the moment when Maria comes into the cell where Anna has been waiting, Maria is declared the winner.

Obviously, nothing depends on the statues, so it all depends on Maria. Determine who will win, if Maria does not make a strategic error.

Input
You are given the 8 strings whose length equals 8, describing the initial position on the board. The first line represents the top row of the board, the next one — for the second from the top, and so on, the last line represents the bottom row. Each character string matches a single cell board in the appropriate row, and the characters are in the same manner as that of the corresponding cell. If the cell is empty, the corresponding character is “.”. If a cell has Maria, then it is represented by character “M”. If a cell has Anna, it is represented by the character “A”. If a cell has a statue, then the cell is represented by character “S”.

It is guaranteed that the last character of the first row is always “A”, the first character of the last line is always “M”. The remaining characters are “.” or “S”.

Output
If Maria wins, print string “WIN”. If the statues win, print string “LOSE”.

Examples
Input
…A






M…
Output
WIN
Input
…A





SS…
M…
Output
LOSE
Input
…A




.S…
S…
MS…
Output
LOSE
题意:要从M走到A,不能走S。而且,M和所有的S交替走,M先走,S后走。M可以留在原地,也可以往八个方向走。S只能往下走。问能否走到A。
思路:反正就是8*8的一个图。直接暴力bfs就可以,记录一下走了多少步到达的这个点。以后再出现就不用重复这个情况了。而且在S是逐步下降的,还要注意走到这个点的时候有没有S降到这个点,或者这个点上一点就是S,都不行。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxx=10;
char s[maxx][maxx];
int mp[maxx][maxx][maxx];
int d[][2]={{0,0},{1,0},{1,1},{-1,0},{0,-1},{1,-1},{-1,1},{-1,-1},{0,1}};
struct node{
	int x,y,z;
	node(int a,int b,int c)
	{
		x=a,y=b,z=c;
	}
};
int sx,sy,ex,ey;

inline void bfs(int x,int y,int &flag)
{
	queue<node> q;
	q.push(node(x,y,0));
	mp[x][y][0]=1;
	while(q.size())
	{
		node a=q.front();
		q.pop();
		if(a.x==ex&&a.y==ey)
		{
			flag=1;
			return ;
		}
		for(int i=0;i<9;i++)
		{
			int tx=a.x+d[i][0];
			int ty=a.y+d[i][1];
			if(tx<0||tx>=8||ty<0||ty>=8) continue;
			if(s[tx][ty]=='S'&&a.z==0) continue;
			if((tx>=a.z+1&&s[tx-a.z-1][ty]=='S')||(tx>=a.z&&s[tx-a.z][ty]=='S')) continue;//这里注意,如果走到这一步的时候就是S,或者这一点上面就是S,就不能走了。
			if(mp[tx][ty][a.z+1]) continue;
			mp[tx][ty][a.z+1]=1;
			q.push(node(tx,ty,a.z+1));
		}
	}
	return ;
}
int main()
{
	for(int i=0;i<8;i++) scanf("%s",s[i]);
	for(int i=0;i<8;i++)
	for(int j=0;j<8;j++)
	{
		if(s[i][j]=='M') sx=i,sy=j;
		if(s[i][j]=='A') ex=i,ey=j;
	}
	int flag=0;
	bfs(sx,sy,flag);
	if(flag) puts("WIN");
	else puts("LOSE");
	return 0;
}

努力加油a啊,(o)/~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Oracle中,可以使用ORDER BY子句对查询结果进行手写排序。根据你提供的两个例子,可以看出在ORDER BY子句中,可以使用表的列名进行排序。例如,根据第一个例子中的statues_row字段进行排序,可以使用以下语句: SELECT * FROM (SELECT * FROM table ORDER BY statues_row DESC) WHERE ROWNUM < 4; 在第二个例子中,根据pm.creation字段进行排序,可以使用以下语句: SELECT pm.MODEL_ID AS "modelId", pm.MODEL_NO AS "modelNo", pm.MODEL_TYPE_CN AS "modelTypeCn", pm.MODEL_TYPE_EN AS "modelTypeEn", pm.PROD_IMG_URL AS "prodImgUrl", pm.MODEL_BASE_TYPE AS "modelBaseType", pm.STATUS AS "status" FROM t_hog_product_models pm ORDER BY pm.creation DESC; 通过在ORDER BY子句中指定要排序的列名和排序顺序(ASC表示升序,DESC表示降序),可以实现手写排序。 #### 引用[.reference_title] - *1* [Oracle分页排序数据混乱原因及解决](https://blog.csdn.net/xiaoxiaovbb/article/details/121332041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Oracle 分页混乱解决](https://blog.csdn.net/gjklop/article/details/79310397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starlet_kiss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值