原**
廣度搜尋 比較麻煩的地方是加了乙個查克拉,用book陣列標記的時候將查克拉加上就ok 記得當時做的時候廢了好長時間
兩種方法,不多bb
ac**
三維陣列標記的
#include
#include
struct node
q[40002];
int m,n,ck,sx,sy;
char map[
202]
[202];
int book[
202]
[202][
20];void
bfs();
head=tail=1;
q[1]
.x=sx,q[1]
.y=sy,q[1]
.num=ck;q[1]
.step=0;
book[sx]
[sy]
[ck]=1
; tail++
;while
(headif(map[tx]
[ty]
=='#'
&&tz>0)
if(map[tx]
[ty]
=='+')}
head++;}
printf
("-1\n");
}int
main()
}if(flag)
break;}
bfs();
return0;
}
直接判斷的
#include
#include
struct node
q[40002];
int book[
202]
[202];
char map[
202]
[202];
int sx,sy,t,n,m;
intbfs()
; q[1]
.x=sx,q[1]
.y=sy,q[1]
.time=
0,q[1]
.num=t;
head=tail=1;
tail++
;while
(headif(map[tx]
[ty]
=='+'
)return q[tail-1]
.time;}}
head++;}
return0;
}int
main()
} key=
bfs();
if(key)
printf
("%d\n"
,key)
;else
printf
("-1\n");
}
bfs 鳴人與佐助
發現了沒有這題包括之前的題目在廣搜裡面都涉及到了狀態這個詞。而狀態裡面的變數是會隨著廣搜的過程和題目的限制發生相應的變化的。比如上一題的迷宮問題狀態中就有x與y座標和父節點這幾個引數。這一題由於多了乙個查克拉的限制所以在狀態中加上查克拉。題解 這道題用bfs來做。1 由於每一層加的時間是一樣的,所以...
DFS 剪枝 BFS 鳴人和佐助
佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個...
鳴人和佐助
已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費1個單位時間,打敗...