亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

網易編程題 逃脫地牢

2019-11-10 20:06:19
字體:
來源:轉載
供稿:網友

給定一個 n 行 m 列的地牢,其中 ‘.’ 表示可以通行的位置,’X’ 表示不可通行的障礙,牛牛從 (x0 , y0 ) 位置出發,遍歷這個地牢,和一般的游戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位置上。牛牛想知道最壞情況下,他需要多少步才可以離開這個地牢。 輸入描述:

每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 50),表示地牢的長和寬。接下來的 n 行,每行 m 個字符,描述地牢,地牢將至少包含兩個 ‘.’。接下來的一行,包含兩個整數 x0, y0,表示牛牛的出發位置(0 <= x0 < n, 0 <= y0 < m,左上角的坐標為 (0, 0),出發位置一定是 ‘.’)。之后的一行包含一個整數 k(0 < k <= 50)表示牛牛合法的步長數,接下來的 k 行,每行兩個整數 dx, dy 表示每次可選擇移動的行和列步長(-50 <= dx, dy <= 50)

輸出描述:

輸出一行一個數字表示最壞情況下需要多少次移動可以離開地牢,如果永遠無法離開,輸出 -1。以下測試用例中,牛牛可以上下左右移動,在所有可通行的位置.上,地牢出口如果被設置在右下角,牛牛想離開需要移動的次數最多,為3次。

輸入例子:

3 3 … … … 0 1 4 1 0 0 1 -1 0 0 -1

輸出例子:

3


錯誤做法如下,利用動態規劃,每個位置存儲到達此位置的最短步數,這個思路的問題是,由于二維移動所以在第一遍遍歷所有點的時候會跳過一些點,這些點之后還有可能到達。這樣就會漏掉一些點。

#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;int main(){ int dungeon_rows, dungeon_cols; cin >> dungeon_rows >> dungeon_cols; //vector<vector<char>> *dung_vec=new vector<vector<char>>(dungeon_rows,vector<char>(dungeon_cols,0)); vector<vector<int>> dung_vec(dungeon_rows, vector<int>(dungeon_cols, 0)); for (int i = 0; i != dungeon_rows; ++i){ string in_put; cin >> in_put; for (int j = 0; j != dungeon_cols; ++j) { dung_vec[i][j] = in_put[j]; } } int start_cols, start_rows; cin >> start_rows >> start_cols; int step_num; cin >> step_num; vector<vector<int>> step_vec(step_num, vector<int>(2, 0)); for (int i = 0; i != step_num; ++i) { cin >> step_vec[i][0] >> step_vec[i][1]; } vector<vector<int>> dung_max_step(dungeon_rows, vector<int>(dungeon_cols, -1)); dung_max_step[start_rows][start_cols] = 0; for (int i = start_rows; i != dungeon_rows; ++i){ for (int j = start_cols; j != dungeon_cols; ++j) { if (dung_max_step[i][j] != -1) { for (int m = 0; m < step_num; ++m) { if ((0 <= (step_vec[m][0] + i) && (step_vec[m][0] + i)< dungeon_rows) && 0 <= (step_vec[m][1] + j)&&(step_vec[m][1] + j)< dungeon_cols) { if (dung_vec[i + step_vec[m][0]][j + step_vec[m][1]] == '.'&&dung_max_step[i][j] != -1) { if (dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] == -1) dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] = dung_max_step[i][j] + 1; else dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] = min(dung_max_step[i][j] + 1, dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]]); } } } } } } for (int i = 0; i != start_rows; ++i){ for (int j = 0; j != start_cols; ++j) { if (dung_max_step[i][j] != -1) { for (int m = 0; m < step_num; ++m) { if ((0 <= (step_vec[m][0] + i) && (step_vec[m][0] + i)< dungeon_rows) && 0 <= (step_vec[m][1] + j) && (step_vec[m][1] + j)< dungeon_cols) { if (dung_vec[i + step_vec[m][0]][j + step_vec[m][1]] == '.'&&dung_max_step[i][j] != -1) { if (dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] == -1) dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] = dung_max_step[i][j] + 1; else dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]] = min(dung_max_step[i][j] + 1, dung_max_step[i + step_vec[m][0]][j + step_vec[m][1]]); } } } } } } int max_step = -1; for (int i = 0; i != dungeon_rows; ++i){ for (int j = 0; j != dungeon_cols; ++j) { if(dung_max_step[i][j]==-1&&dung_vec[i][j]=='.') { cout<<-1<<endl; return 0; } if (max_step<dung_max_step[i][j]) max_step = dung_max_step[i][j]; } } cout << max_step << endl; return 0;}

可以利用廣度優先搜素的方法進行計算

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <queue>#include <climits>using namespace std;struct Point{ int x,y; Point(int _x,int _y):x(_x),y(_y){}; Point go(int m,int n) {return Point(x+m,y+n);}};int main(){ int dungeon_rows, dungeon_cols; cin >> dungeon_rows >> dungeon_cols; //vector<vector<char>> *dung_vec=new vector<vector<char>>(dungeon_rows,vector<char>(dungeon_cols,0)); vector<vector<int>> dung_vec(dungeon_rows, vector<int>(dungeon_cols, 0)); for (int i = 0; i != dungeon_rows; ++i){ string in_put; cin >> in_put; for (int j = 0; j != dungeon_cols; ++j) { dung_vec[i][j] = in_put[j]; } } int start_cols, start_rows; cin >> start_rows >> start_cols; int step_num; cin >> step_num; vector<vector<int>> step_vec(step_num, vector<int>(2, 0)); for (int i = 0; i != step_num; ++i) { cin >> step_vec[i][0] >> step_vec[i][1]; } vector<vector<int>> dung_max_step(dungeon_rows, vector<int>(dungeon_cols, INT_MAX)); dung_max_step[start_rows][start_cols] = 0; queue<Point> que; que.push(Point(start_rows,start_cols)); while(!que.empty()) { Point temp=que.front(); que.pop(); for(int i=0;i!=step_num;++i) { if(temp.x+step_vec[i][0]>=0&&temp.x+step_vec[i][0]<dungeon_rows&&temp.y+step_vec[i][1]>=0&&temp.y+step_vec[i][1]<dungeon_cols&& dung_vec[temp.x+step_vec[i][0]][temp.y+step_vec[i][1]]=='.') { if(dung_max_step[temp.x+step_vec[i][0]][temp.y+step_vec[i][1]]>dung_max_step[temp.x][temp.y]+1) { dung_max_step[temp.x+step_vec[i][0]][temp.y+step_vec[i][1]]=dung_max_step[temp.x][temp.y]+1; que.push(Point(temp.x+step_vec[i][0],temp.y+step_vec[i][1])); } } } } int max_step=-1; for (int i = 0; i != dungeon_rows; ++i){ for (int j = 0; j != dungeon_cols; ++j) { if(dung_max_step[i][j]==INT_MAX&&dung_vec[i][j]=='.') { cout<<-1<<endl; return 0; } if (dung_vec[i][j]=='.'&&max_step<dung_max_step[i][j]) max_step = dung_max_step[i][j]; } } cout << max_step << endl; return 0;}
上一篇:JDBC連接MySQL數據庫

下一篇:std::function

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频在线免费观看| 日本不卡视频在线播放| 亚洲乱码国产乱码精品精天堂| 国产视频亚洲视频| 亚洲成色www8888| 91精品国产高清自在线| 亚洲性69xxxbbb| 欧美亚洲成人网| 久久九九全国免费精品观看| 国产精品毛片a∨一区二区三区|国| 日韩精品一区二区三区第95| 韩国视频理论视频久久| 中文日韩电影网站| 亚洲已满18点击进入在线看片| 日韩免费在线观看视频| 亚洲色图欧美制服丝袜另类第一页| 国产一区二区三区日韩欧美| 中日韩美女免费视频网站在线观看| 成人性教育视频在线观看| 91亚洲精品久久久久久久久久久久| 欧美视频第一页| 国产精品女人网站| 日韩欧美在线视频免费观看| 精品国产一区二区三区久久久狼| 国产精品成人观看视频国产奇米| 国产成人精品免高潮费视频| 欧美性高跟鞋xxxxhd| 欧美黄色免费网站| 最近2019中文字幕大全第二页| 欧美整片在线观看| 国产91在线播放九色快色| 欧美电影免费在线观看| 国产mv久久久| 亚洲色图综合网| 久久久久中文字幕2018| 亚洲无线码在线一区观看| 久久综合国产精品台湾中文娱乐网| 揄拍成人国产精品视频| 欧美日韩美女在线观看| 精品偷拍各种wc美女嘘嘘| 国产精品久久久久久久av大片| 91高潮精品免费porn| 久久天天躁狠狠躁夜夜躁2014| 国产精品成人av性教育| 亚洲精品在线不卡| 萌白酱国产一区二区| 91亚洲国产成人精品性色| 亚洲精品免费网站| 国产精品久久中文| 国产综合福利在线| 狠狠色噜噜狠狠狠狠97| 亚洲欧美日韩天堂| 黄色成人av网| 国产精品日日摸夜夜添夜夜av| 亚洲xxxx18| 亚洲欧洲在线观看| 精品一区二区三区四区| 久久精品免费电影| 一区二区欧美亚洲| 成人激情视频免费在线| 色一区av在线| 国产精品免费久久久久久| 日韩成人黄色av| 亚洲另类欧美自拍| 不卡av在线播放| 欧美成人一二三| 97精品视频在线播放| 国产亚洲日本欧美韩国| 亚洲国产精品久久久久秋霞蜜臀| 国产精品成人品| 国产91免费看片| 亚洲精品国产拍免费91在线| 欧美一区二区三区免费观看| 欧美一级成年大片在线观看| 亚洲激情电影中文字幕| 欧美高清激情视频| 精品小视频在线| 国产精品视频在线播放| 欧美极品少妇xxxxⅹ喷水| 亚洲欧美变态国产另类| 国产欧美韩国高清| 日韩视频在线观看免费| 日韩欧美aⅴ综合网站发布| 亚洲第一色中文字幕| 亚洲欧美在线免费| 黄网站色欧美视频| 66m—66摸成人免费视频| 国产午夜精品全部视频播放| 国产精品久久久久久av下载红粉| 欧美日韩一区二区三区在线免费观看| 91高清免费视频| 精品亚洲一区二区三区在线观看| 日韩中文字幕在线免费观看| 亚洲乱码一区二区| 成人高清视频观看www| 欧美影院久久久| 日韩欧美一区二区三区久久| 日韩一中文字幕| 久久91亚洲精品中文字幕奶水| 欧美日韩国产丝袜另类| www.亚洲人.com| 国产精品999| 亚洲精品国精品久久99热一| 96精品久久久久中文字幕| 精品视频偷偷看在线观看| 国产999视频| 欧美亚洲另类激情另类| 国产精品黄色av| 亚洲高清一二三区| 亚洲人成毛片在线播放| 欧美性猛交xxxxx水多| 亚洲天堂网在线观看| 亚洲成人a**站| 国自在线精品视频| 精品人伦一区二区三区蜜桃免费| 成人精品一区二区三区电影免费| 欧美一级大片在线免费观看| 欧美日韩国内自拍| 国产精品夜间视频香蕉| 最近中文字幕mv在线一区二区三区四区| 97视频网站入口| 91久久精品日日躁夜夜躁国产| 亚洲成人av在线| 久久久视频精品| 91精品国产综合久久香蕉| 亚洲欧美在线一区| 欧美日韩免费在线| 亚洲性av网站| 中文字幕欧美日韩精品| 国产盗摄xxxx视频xxx69| 国产成人精品一区二区| 日韩在线观看免费全| 国内精品久久久久久中文字幕| 日韩在线观看成人| 26uuu另类亚洲欧美日本一| 欧美亚洲国产视频| 亚洲国产欧美一区二区丝袜黑人| 欧美激情极品视频| 亚洲综合在线小说| 亚洲第一精品福利| 欧美极品少妇xxxxⅹ裸体艺术| 欧美另类99xxxxx| 国产aⅴ夜夜欢一区二区三区| 亚洲性视频网址| 成人免费高清完整版在线观看| 久久久久一本一区二区青青蜜月| 国产中文字幕亚洲| 日韩在线观看免费高清完整版| 欧美激情精品久久久久久久变态| 日韩电影免费在线观看| 国产日韩欧美综合| 亚洲第一色中文字幕| 欧美国产在线视频| 黄色一区二区三区| 国产国语刺激对白av不卡| 日韩免费在线看| 亚洲欧洲第一视频| 91精品视频在线看| 粉嫩av一区二区三区免费野| 亚洲 日韩 国产第一| 日韩在线观看免费全集电视剧网站| 亚洲二区在线播放视频| 日韩av免费在线看| 亚洲国产精品女人久久久|