8.dfs--王子救公主(遍歷迷宮,王子和公主訪問過同一位置,即成功救公主)
題目:
分析:
和前面的迷宮例題類似,遇到牆則不能通過
(1)分別尋找王子和公主的初始位置
(2)設定一個三維訪問陣列v[n][m][2]:v[n][m][0]標記王子是否走過、v[n][m][1]標記公主是否走過
(3)分別對王子和公主進行深度優先搜尋dfs(當前x,y,0或1),0表示王子,1表示公主
(4)最後遍歷訪問陣列v,
如果存在位置i,j,使得v[i][j][0]和v[i][j][1]都為true(即王子和公主都訪問了該位置),則王子和公主肯定相遇(王子能找到公主)
dfs: (1)先判斷當前位置是否合法:是否越界、是否為牆、是否已訪問
(2)設定當前位置已訪問
(3)再訪問下一個位置(王子移動2步,公主移動1步)
程式碼:
import java.util.Scanner;
public class Main {
/*
* 思路:
測試資料
4
1 2
1 3
2 4
正常輸出:
3 1 0 0
* */
static int n;//迷宮的行列
static int m;
static char[][] g;//迷宮
static boolean[][][] v;//訪問陣列
public static void main(String[] args){
//1.輸入相關值
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
g = new char[n][];
v = new boolean[n][m][2];
//2.初始化迷宮
for(int i=0;i<n;i++) {
g[i] = sc.next().toCharArray();
}
//3.尋找王子的位置
int x1=0,y1=0;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(g[i][j]=='w') {
x1=i;
y1=j;
break;
}
}
}
//4.尋找公主的位置
int x2=0,y2=0;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(g[i][j]=='g') {
x2=i;
y2=j;
break;
}
}
}
//5.對王子進行dfs。0表示王子
dfs(x1,y1,0);
//6.對公主進行dfs.1表示公主
dfs(x2,y2,1);
//7.判斷王子和公主是否訪問過同一位置,即是否相遇
boolean ans=false;
for(int i=0;i<n;i++) {
if(ans) break;
for(int j=0;j<m;j++) {
if(v[i][j][0] && v[i][j][1]) {
ans=true;
break;
}
}
}
if(ans) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
/*
* x、y:當前開始位置
* t:標記是王子還是公主
* */
private static void dfs(int x, int y, int t) {
//1.判斷位置是否合法
if(x<0 || x>=g.length || y<0 || y>=g[0].length || g[x][y]=='#' || v[x][y][t]) {
return;
}
//2.訪問陣列
v[x][y][t]=true;
//3.訪問下一個陣列
dfs(x+(2-t),y,t);
dfs(x-(2-t),y,t);
dfs(x,y+(2-t),t);
dfs(x,y-(2-t),t);
}
}
相關文章
- P4389 付公主的揹包
- 《摩爾莊園》| 黛翎公主的故事
- Ignatius and the Princess IV——伊格納提烏斯和四公主
- CXCX曦茜公主系統開發原始碼部署原始碼
- 用python深度優先遍歷解迷宮問題Python
- 風雨過後見彩虹:救園成功
- 曲線救國--訪問dockerhub倉庫Docker
- 接頭霸王是誰?《公主連結Re:Dive》公測定檔!
- 來了來了!《幻境公主》7月9日公測來了!
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 《時光公主》國服來襲,全平臺預約正式開啟!
- 創意營銷引爆全網狂歡 B站是如何讓《公主連結Re:Dive》成功出圈的?
- Artisan 小王子 作品分享
- 休閒與競技的結合:我與《公主連結 Re:Dive》的邂逅
- 上線即遇冷遊戲搶救指南遊戲
- 與公主們一同冒險!《花園魔三國2》今日正式發售
- 從中原到吐蕃,這款獨立遊戲將重溫文成公主入藏之路遊戲
- 《時光公主》有機會打破國內女性向市場的“爆款荒”嗎?
- 手機移動辦公系統日益普及,成企業辦公主流趨勢
- 迷宮問題
- 免費領40連!《公主連結Re:Dive》全平臺公測現已開啟!
- “動作捕捉”竟始於一戰時期,從《白雪公主》到《賽博朋克2077》
- 救園成功後遇小煩惱,阿里雲過來挖牆角阿里
- 從救貓還是救畫說起
- 《皇家騎士:300自走棋》今日全渠道不刪檔測試 陪公主殿下下棋
- 《公主連結》互動設計師:如何用TV畫手法制作2D技能動畫動畫
- [譯] 白雪公主如何幫助 Airbnb 證明在設計中最重要的技能是講故事AI
- 一波未平一波又起:公主郵輪承認公司存在資料洩露問題
- 《公主連結Re:Dive》4月17日全平臺公測決定!iOS預訂現已開啟iOS
- 邦芒簡歷:簡歷上有這些錯誤神仙也救不了
- 回溯法求迷宮問題
- POJ3984-迷宮問題
- 天辰的救贖(JS)第一章(救贖之地)JS
- 二次元週報:《公主連結》上線暢銷榜第6 《NekoPara》系列銷量突破300萬二次元
- 簡單介紹Python迷宮生成和迷宮破解演算法Python演算法
- POJ3984 迷宮問題【BFS】
- 以玩家為本位,一週歲的《公主連結Re:Dive》給行業上了一堂“運營公開課”行業
- python 使用 最大生成樹 解決 營救問題Python