蓝桥杯java第六届决赛第四题--穿越雷区
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第六届决赛第四题--穿越雷区
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:穿越雷區X星的坦克戰車很奇怪,它必須交替地穿越正能量輻射區和負能量輻射區才能保持正常運轉,否則將報廢。某坦克需要從A區到B區去(A,B區本身是安全區,沒有正能量或負能量特征),怎樣走才能路徑最短?已知的地圖是一個方陣,上面用字母標出了A,B區,其它區都標了正號或負號分別表示正負能量輻射區。例如:A + - + -- + - - +- + + + -+ - + - +B + - + -坦克車只能水平或垂直方向上移動到相鄰的區。數據格式要求:輸入第一行是一個整數n,表示方陣的大小, 4<=n<100接下來是n行,每行有n個數據,可能是A,B,+,-中的某一個,中間用空格分開。A,B都只出現一次。要求輸出一個整數,表示坦克從A區到B區的最少移動步數。如果沒有方案,則輸出-1例如:用戶輸入:5A + - + -- + - - +- + + + -+ - + - +B + - + -則程序應該輸出:10資源約定:峰值內存消耗(含虛擬機) < 512MCPU消耗 < 2000ms請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。注意:主類的名字必須是:Main,否則按無效代碼處理。
package com.sihai.liujie;import java.util.Scanner;public class _4 {static char map[][] = new char[110][110]; static int vis[][] = new int[110][110];int n;static int sum=1000000;public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();int x = 0,y = 0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { map[i][j] = s.next().charAt(0); if(map[i][j]=='A') { x=i;y=j; } } } dfs(0,x,y); if(sum==1000000) System.out.println(-1);else System.out.println(sum);}public static void dfs(int cur,int x,int y) { if(cur>=sum) return;if(map[x][y]=='B') { sum=cur; return; } vis[x][y]=1; if((x-1)>=0&&vis[x-1][y]==0&&(map[x][y]!=map[x-1][y])) { dfs(cur+1,x-1,y); } if((y-1)>=0&&vis[x][y-1]==0&&(map[x][y]!=map[x][y-1])) { dfs(cur+1,x,y-1); } if((x+1)>=0&&vis[x+1][y]==0&&(map[x][y]!=map[x+1][y])) { dfs(cur+1,x+1,y); } if((y+1)>=0&&vis[x][y+1]==0&&(map[x][y]!=map[x][y+1])) { dfs(cur+1,x,y+1); } vis[x][y]=0; }
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的蓝桥杯java第六届决赛第四题--穿越雷区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯java第六届决赛第三题--显示二
- 下一篇: 蓝桥杯java第五届决赛第一题--国王的