炸彈人(廣搜代碼)

找最多敵人的位置

input

13 13
#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.#.#
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#

#############

output

7 11

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class 炸彈人 {
	static char[][] mp = new char[51][51];
	static int[][] book = new int[51][51];
	static int num(int i,int j){
		int sum=0;
		int x=i,y=j;
		while(mp[x][y]!='#'){
			if(mp[x][y]=='G')
				sum++;
			x--;
		}
		x=i;y=j;
		while(mp[x][y]!='#'){
			if(mp[x][y]=='G')
				sum++;
			x++;
		}
		x=i;y=j;
		while(mp[x][y]!='#'){
			if(mp[x][y]=='G')
				sum++;
			y++;
		}
		x=i;y=j;
		while(mp[x][y]!='#'){
			if(mp[x][y]=='G')
				sum++;
			y--;
		}
		return sum;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		Queue<note> qe = new LinkedList<note>();
		int m=in.nextInt();
		int n=in.nextInt();
		int max=0;
		int mx;
		int my;
		int[][] next = {{0,1},{1,0},{-1,0},{0,-1}};
		int startx=0,starty=0,tx,ty,step=0;
		
		
		for(int i=0;i<m;i++){
			String s=in.next();
			for(int j=0;j<n;j++){
				mp[i][j] = s.charAt(j);
			}
		}
		for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
				if(mp[i][j]=='.'){
					startx=i;
					starty=j;
				}
			}
		}
		qe.add(new note(startx,starty));
		max=num(startx,starty);
		mx=startx;my=starty;
		book[startx][starty]=1;
		while(qe.size()!=0){
			for(int i=0;i<=3;i++){
				tx=qe.peek().x+next[i][0];
				ty=qe.peek().y+next[i][1];
				if(tx<0||tx>=m||ty<0||ty>=n)continue;
				if(mp[tx][ty]=='.'&&book[tx][ty]==0){
					book[tx][ty]=1;
					qe.add(new note(tx,ty));
					num(tx,ty);
					if(max<num(tx,ty)){
						max=num(tx,ty);
						mx=tx;
						my=ty;
					}
					
				}
				}
			qe.poll();
		}
	System.out.println(mx+" "+my);
	}

}
class note{
	int x;
	int y;
	
	note(int x,int y){
		this.x=x;
		this.y=y;
	
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章