ブルーブリッジカップ第6回決勝-雷区dfs(java)を通り抜ける


タイトル:雷区X星を通り抜ける戦車は不思議で、正エネルギー放射区と負エネルギー放射区を交互に通り抜けなければ正常な運転を維持できません.そうしないと廃棄されます.ある戦車はA区からB区に行く必要があります(A、B区自体は安全区で、正のエネルギーや負のエネルギーの特徴がありません)、どのように行けば経路が最短ですか?既知の地図は、A,B領域をアルファベットで表し、他の領域にはプラスまたはマイナスがそれぞれプラスとマイナスのエネルギー放射領域を表している四角行列である.例えば、A+-+--+-+++-++-+-+-++-+-戦車は水平または垂直方向に隣接する領域にしか移動できません.データフォーマットの要件:入力第1行は整数nであり、行列のサイズを表し、4<=n<100の次はn行であり、各行にはn個のデータがあり、A,B,+,-のいずれかであり、中間はスペースで区切られている.A、Bは一度しか現れません.AゾーンからBゾーンへの戦車の最小移動ステップ数を示す整数を出力することが要求される.シナリオがない場合、出力-1たとえば、ユーザー入力:5 A+-+--+++++-++++++++++++++-の場合、プログラムは出力するべきです:10リソース約定:ピークメモリ消費(仮想マシンを含む)<512 M CPU消費<2000 ms要求通りに出力してください.ヘビを描かずに印刷してください.と入力します.すべてのコードを同じソースファイルに配置し、デバッグに合格した後、コピーしてソースコードをコミットします.注意:package文は使用しないでください.jdk 1は使用しないでください.7以降の機能.注意:メインクラスの名前は:Mainでなければなりません.そうしないと、無効なコードで処理されます.
import java.util.*;
public class Main{
	static int[][] vis ;
	static char[][] arr ;
	static int num,sum=0;
	static Stack stack = new Stack();
	static int[][] temp = { {1,0},{0,1},{-1,0},{0,-1} };
	
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		int ax=0,ay=0;// A   
		num = sc.nextInt();
		vis= new int[num][num];
		arr= new char[num][num];
		sc.nextLine();
		for(int i=0;istep?step:sum;}//      
		for(int i=0;i<4;i++){
			int xx = x+temp[i][0];
			int yy = y+temp[i][1];
			if(xx<0||xx>=num||yy<0||yy>=num) continue;
			if(vis[xx][yy]==0){
				vis[xx][yy] = 1;//  
				stack.add(x+"-"+y);//        				        
                dfs(xx,yy,step+1,arr[x][y]);
				vis[xx][yy] = 0;//    
			}
		}
		
	}
	
}

図検索の問題にはまだ慣れていないかもしれませんが、見たばかりでは少し難しいと思いますが、実際には基礎dfs問題型で、納得してからすぐ出てきました.問題にぶつかったらやはり冷静にしなければならない.