好累啊,寫篇部落格歇歇。
題目背景很有趣,是大家小時候經常玩的坦克大戰,哈哈。弱弱地表示本人小時候經常玩遊戲機。
此題是在迷宮問題的基礎上做了些改動,就是地圖上能走的點可能耗費時間1,也可能耗費時間2。
那麼,元素在出佇列時,不能簡單的按照以前的入隊順序出隊了,而應該讓時間最短的先出隊,
這樣就能夠保證先入隊的點一定是時間最短的,那麼搜到終點時也時間也一定最小。
現在回頭想下,迷宮問題之所以沒有考慮這個問題,是因為先入隊的點的時間一定不大於後入隊的。
言歸正傳,如何讓時間最短的先出隊呢?----------stl已經幫我們弄好了,priority_queue;
話說優先佇列我也是新接觸的,用法見**吧,大家一起學習。
最近廣搜做的不少,**也比較清晰了吧。
#include #include #include #define bug puts("here!!!")
using namespace std;
typedef struct p
ac;struct cmp
};priority_queue,cmp> s;
int dir=;
int map[302][302];
int to_x,to_y;
int bfs()
); map[x][y]=0;}}
}return -1;
}void clear()
int main()
);break;
case 't':to_x =i,to_y =j;break;
case 'b':map[i][j]=2;break;
case 'e':map[i][j]=1;break;}}
getchar();
}printf("%d\n",bfs());
clear();
}return 0;
}
nyoj284 坦克大戰 搜尋 bfs
樣例輸入 3 4ybeb eere sste 0 0樣例輸出 8 題意 從y字母的位置到t字母的位置最少trun了幾次 遇到r,s不能走,遇到b的話要turn 2次。坑點在必須用優先佇列,hiphop man 為什麼?真的不知道 不喜歡你的style kkk include include incl...
坦克大戰(nyoj284)
題目大體意思就是,求從地圖上的y走到t的最小步數,其中s和r不能走,b要走兩步,e要走一步。測試輸入 3 4 ybeb eere sste 0 0測試輸出 8 這個題要用優先佇列,不用的話沒有辦法保證所求的步數是最小的。我也查了一些關於優先佇列的資料,做以下整理 在優先佇列中,優先順序高的元素先出佇...
NYOJ284坦克大戰
bfs求最短路,這個題走到 b 點是要花費2個時間,e 是1個時間,所以要用乙個優先佇列,優先順序就是花費小的先出隊,其餘的就是模板了。include include include using namespace std define inf 0x3f3f3f3f int stx,sty int ...