為了一些你們不知道的原因,我們把LOL的地圖抽象為一個n×m的矩陣 提莫積攢了k個蘑菇準備種到地圖上去,因為提莫的背簍漏了,所以每一個提莫走過的地方都會被擺下一個蘑菇,兩個蘑菇同時種在一個地方的話就會爆炸,所以一旦即將出現這種情況,提莫會直接傳送回家,防止自己被炸死 之前的排位賽中因為亂種蘑菇提莫已經被罵了好多次了,所以這次提莫特地查資料對當前地圖的各個位置種下蘑菇的價值做了統計,但是因為提莫行動比較笨拙,所以他每次只能移動到上下左右四個方向的格子中(如果該方向有格子的話 每次行走提莫會從四個方向挑選一個權值最大的方向,如果有最大的權值有多個,他會從這多個相同的最大權值之中找出沒有走過并且按照上下左右的優先順序挑選一個合適的方向走。如果最大權值都被走過了,他會心灰意冷的傳送回家,此時直接輸出"BOOM" (提莫會順手在他的起點順手種一個蘑菇下去
多組輸入。輸入第一行包含地圖大小n,m,蘑菇數量k。(1 <= n,m <= 100,1 <= k <= n*m)接下來的n行每行有m個數(并且保證每個數的范圍[1,1e5)接下來兩個整數x,y代表提莫的起點
如果走到最后沒有地方可以種蘑菇了,但蘑菇還沒全部種完,輸出"BOOM".如果蘑菇在半途中種完了,輸出提莫所處的坐標"Teemo: x y".
3 3 31 2 34 5 67 8 92 23 3 51 2 34 5 67 8 92 2Example Output
Teemo: 3 3BOOMHint
Author
#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{ int x,y,ans;} q[2005];int n,m,k;int map[200][200];int vis[200][200];int a,b;int dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};void BFS(int x,int y){ struct node t,f; int e=0; int s=0; t.x=x; t.y=y; t.ans=1; q[e++]=t; vis[t.x][t.y]=1; while(s<e) { t=q[s++]; if(t.ans==k) { printf("Teemo: %d %d/n",t.x,t.y); return ; } int max=0; int flag=0; int i; for(i=0; i<=3; i++) { if(map[t.x+dir[i][0]][t.y+dir[i][1]]>max) { max=map[t.x+dir[i][0]][t.y+dir[i][1]]; } } for(i=0; i<=3; i++) { f.x=t.x+dir[i][0]; f.y=t.y+dir[i][1]; if(f.x>0&&f.x<=n&&f.y>0&&f.y<=m&&vis[f.x][f.y]==0&&map[f.x][f.y]==max) { flag=1; f.ans=t.ans+1; q[e++]=f; vis[f.x][f.y]=1; } } if(flag==0) { printf("BOOM/n"); return ; } } printf("BOOM/n"); return ;}int main(){ while(~scanf("%d%d%d",&n,&m,&k)) { int i,j; for(i=1; i<=n; i++) { for(j=1; j<=m; j++) { scanf("%d",&map[i][j]); } } scanf("%d%d",&a,&b); BFS(a,b); } return 0;}
新聞熱點
疑難解答