題意:乙個迷宮...從起點走到終點,拐彎次數有限制的情況下找到最優的解。
坑爹:本來用結構體來記錄座標、走的步數和拐彎次數,但是發現如果搜一條路徑發現行不通的話這條路上所有點都被標記了,當我再次經過這裡面的某個點
的時候就不能通過了。比如說我一開始行不通的那條路通過某個點是左右通過的,但我下次再要從上或者從下經過這個點的時候就會過不了。
解法:每次向乙個方向拓展時將這乙個方向所有滿足條件的點全部進隊,這樣就解決了某個點不會因為之前被標記過而導致下一次以另外乙個方向進入這個店
的時候就不給經過的問題。
view code
1 #include 2 #include 3using
namespace
std;45
intn ;
6intm;7
char str[105][105];8
bool map[105][105];9
10int po[4][2] = ;
1112
struct
node
13node[1000005
];17
18int
main ()
1937 scanf ("
%d%d%d%d%d
",&k,&x1,&y1,&x2,&y2);
38 x1 --;
39 x2 --;
40 y1 --;
41 y2 --;
4243
if (str[y1][x1] == '
*' || str[y2][x2] == '*'
)444849
if (x1 == x2 && y1 ==y2 )
5054
55 queue q;
56int t = 0
;57 node[t].i =y1;
58 node[t].j =x1;
59 node[t].sum = 0;60
61 map[y1][x1] = 1;62
63q.push(t);
6465
intstai;
66int
staj;
67int
edi;
68int
edj;
69int flag = 0;70
71while (!q.empty ())
7284
if (node[temp].sum > k + 1)85
8889
for (int i=0; i<4; i++)
90101
102 t ++;
103 node[t] .i =edi;
104 node[t]. j =edj;
105 node[t].sum = node[temp].sum + 1
;106 map[edi][edj] = 1
;107
q.push(t);
108109 edi = edi + po[i][0
];110 edj = edj + po[i][1
];111
}112
}113
}114
if(flag )
115118
else
119122
123}
124return0;
125 }
HDU 1728 逃離迷宮 廣搜
題目鏈結 problem description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,glo...
hdu 1728 逃離迷宮
思路 一開始我是往左和往右走,不轉彎,計數不用加,往上和往下走,就轉彎,計數就加一,進行廣搜,搜到最後那個點,比較就可以啦,但是華麗麗的wa啦。所以改一條路搜到底,走不了啦,就一定要轉彎啦。include include include includeusing namespace std stru...
HDU 1728 逃離迷宮
bfs 搞清楚是轉彎而不是步數。所以需要乙個方向一直走下去直到邊界或者牆。還有就是注意題意。給出起點終點的 x,y 位置是交換的。題目是下標1開始。注意。include include include include include include include include include i...