日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

玉树搜救行动

發布時間:2024/3/12 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玉树搜救行动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

玉樹搜救行動

時間限制(普通/Java):3000MS/10000MS ? ? ? ?? 運行內存限制:65536KByte
總提交:39 ? ? ? ?? ? 測試通過:29

描述

自從玉樹受災以來,有關部門一直在現場搶救落難的人。他們用個種方法搜救,用上了搜救犬,有了搜救犬找到生命跡象就容易了。
?假設現場用一個矩陣表示,搶救的有多條搜救犬,受災的人也有多個可能。
例子:
#p.d#p#
#####.#
d……..#
######p
d表示搜救狗,p表示受災的人,點表示可以通行的路,#表示石頭擋住的路,不能通行。
搜救狗只能上下左右走,不能越過障礙物。
上面的那個例子最多可以救到2個人。因為第三個人被四周包圍搜救狗無法到達。

輸入

輸入數據有多組。每組兩個整數R,C, 2=<R,C<=100, R表示矩陣的行數,C表示矩陣的列數,然后輸入相應矩陣,矩陣保證有搜救狗和受災的人。當輸入R=0且C=0時候輸入結束。

輸出

輸出搜救狗最多能救多少受災的人的數量。

樣例輸入

4?7
#p.d#p#
#####.#
d.....#
######p
0?0

樣例輸出

2

#include<iostream> using std::cin; using std::cout; using std::endl; #include<vector> using std::vector;const size_t MAX_SIZE_X = 100; //地圖大小 const size_t MAX_SIZE_Y = 100; //地圖大小 const short int MAX_DIRECTION = 4; //遍歷方向個數 const short int DIRECTION_X[MAX_DIRECTION] = { 0, 0, 1, -1 }; const short int DIRECTION_Y[MAX_DIRECTION] = { -1, 1, 0, 0 };class Point{ public:int x, y;Point(size_t& t_x, size_t& t_y){x = t_x;y = t_y;} };class Map{ public:char sign;bool has_reached;void set(void){cin >> sign;has_reached = false;} };Map map[MAX_SIZE_X][MAX_SIZE_Y]; size_t size_x, size_y; vector<Point> dog_list; vector<Point> people_list;void set_map(void){size_t x, y;for (x = 0; x != size_x; ++x){for (y = 0; y != size_y; ++y){map[x][y].set();if (map[x][y].sign == 'p'){people_list.push_back(Point(x, y));}else if (map[x][y].sign == 'd'){dog_list.push_back(Point(x, y));}}} }void dfs(const size_t& x, const size_t& y){size_t current_x, current_y;for (short int direction(0); direction != MAX_DIRECTION; ++direction){current_x = x + DIRECTION_X[direction];current_y = y + DIRECTION_Y[direction];if ((current_x >= 0 && current_x < size_x)&& (current_y >= 0 && current_y < size_y)&& map[current_x][current_y].sign != '#'&& !map[current_x][current_y].has_reached){map[current_x][current_y].has_reached = true;dfs(current_x, current_y);}} }int main(void){int sum;while (cin >> size_x >> size_y, size_x && size_y){dog_list.clear();people_list.clear();sum = 0;set_map();for (vector<Point>::iterator it(dog_list.begin()); it != dog_list.end(); ++it){dfs(it->x, it->y);}for (vector<Point>::iterator it(people_list.begin()); it != people_list.end(); ++it){if (map[it->x][it->y].has_reached){++sum;}}cout << sum << endl;}return 0; }


總結

以上是生活随笔為你收集整理的玉树搜救行动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。