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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(二分+区间搜索 )Mountain Walking(poj2110/poj2922)

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (二分+区间搜索 )Mountain Walking(poj2110/poj2922) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

農夫約翰和貝西牛已經開始了其中一個“積極”的假期。他們整天都在山里散步,然后在一天結束時,他們厭倦了回到度假小屋。

由于攀爬需要大量能量并且已經疲憊,他們希望使用其最高和最低高度之間的差異最小的路徑返回到機艙,無論路徑有多長。幫助FJ找到這條易于移動的路徑。

山的地圖由N×N(2 <= N <= 100)整數高程矩陣給出(0 <=任意高程<= 110)FJ和Bessie當前位于左上角位置(第1行,列) 1)并且艙室位于右下方(第N行,第N列)。它們可以向右,向左,向頂部或向網格底部移動。他們不能在對角線上旅行。
輸入
*第1行:單個整數,N

*行2…N + 1:每行包含N個整數,每個整數指定一個正方形的高度。第2行包含網格的第一行(頂部); 第3行包含第二行,依此類推。該行上的第一個數字對應于網格的第一個(左)列,依此類推。
產量
*第1行:一個整數,它是最佳路徑上的最小高度差。
樣本輸入
5
1 1 3 6 8
1 2 2 5 5
4 4 0 3 3
8 0 2 3 4
4 3 0 2 1
樣本輸出
2

分析與解答

這題根滑雪那到一樣,用普通的搜索根本沒法寫,因為廣搜每個節點只訪問一次,而這個并不是只找一條路。深搜的話找路徑需要記錄當前DFS路徑上所遇到所有點的高度,有些路徑中的某個點高度過高,一看就知道不需要走,但是深搜還是要走,所以時間上浪費

這題利用二分,我們二分的是個高度差,就是說當前高度差處于[low,up]這個區間的范圍之中,對于這個區間[low,up]我們用BFS找,看看能不能找到一條從左上角到右下角的路,

我們bfs參數是數的高度,他們的高度差我們二分出來了,現在就不斷枚舉所有可能的起止高度進行遍歷,比如高度差位mid,那么區間就是(low,low+mid)low從一遞增到一百一.。只要有一個路徑的數都在區間里面我們就return
bfs從(1,1)開始搜,先判斷起點是不是在區間范圍內,不是的話返回,是的話入隊,然后只要隊不空,取隊首,然后上下左右移動,一般的bfs,只要是第一次出現,在這個區域內,就入隊了,這個區間的bfs 是有選擇的入隊,只有屬于我們規定的的區間的我們才讓他入隊,就這么一直如下去,如果碰到這個坐標是(n,n)就說明已經找到了屬于這個區間的路徑,返回true
注意兩個if的順序,四個方向能走的不一定在這個區間里

參考代碼:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn=105; int map[maxn][maxn]; int vis[maxn][maxn]; int n; int to[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; struct node{int x,y; };int bfs(int l,int r) {if(map[1][1]<l||map[1][1]>r) return 0;queue<node> q;node k;k.x=1;k.y=1;q.push(k);vis[1][1]=1;while(!q.empty()){node a,b;b=q.front();q.pop();int x=b.x;int y=b.y;for(int j=0;j<4;++j){int ax=x+to[j][0];int ay=y+to[j][1];if(ax>=1&&ax<=n&&ay>=1&&ay<=n&&!vis[ax][ay]){vis[ax][ay]=1;if(map[ax][ay]>=l&&map[ax][ay]<=r){if(ax==n&&ay==n) return true; a.x=ax;a.y=ay;q.push(a);}}}}return false;}int check(int d){for(int i=0;i+d<=110;i++){memset(vis,0,sizeof(vis));if(bfs(i,i+d)) return 1; }return false;} int main() {scanf("%d",&n);for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)scanf("%d",&map[i][j]);int l=0,r=110;while(r>l){int mid = (r+l)/2;if(check(mid)) r=mid;else l=mid+1;}printf("%d\n",r);return 0; } }

欣賞一下dfs

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100+5; int n; int map[maxn][maxn]; int vis[maxn][maxn];//判斷當前節點時候被走過 int max_v,min_v; int dr[]={-1,1,0,0};//上下左右 int dc[]={0,0,-1,1}; bool dfs(int r,int c,int low,int up) {vis[r][c]=1; //錯誤,這里之前vis放到了if下面if(map[r][c]>up || map[r][c]<low) return false;if(r==n&&c==n) return true; //到達終點for(int dir=0;dir<4;dir++){int nr=r+dr[dir],nc=c+dc[dir];if(nr>=1&&nr<=n&&nc>=1&&nc<=n&&!vis[nr][nc])if(dfs(nr,nc,low,up)) return true; //錯誤,這里忘了返回true了}return false; } bool check(int d) {for(int low=0;low+d<=200;low++){memset(vis,0,sizeof(vis)); //錯誤,這里memset放到了for上面if(dfs(1,1,low,low+d)) return true;}return false; } int main() {int T; scanf("%d",&T);for(int kase=1;kase<=T;kase++){scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&map[i][j]);int L=0,R=200;while(R>L){int mid=(R+L)>>1;if(check(mid)) R=mid;else L=mid+1;}//printf("Scenario #%d:\n%d\n\n",kase,R);printf("%d\n",R);}return 0; }

總結

以上是生活随笔為你收集整理的(二分+区间搜索 )Mountain Walking(poj2110/poj2922)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产一区第一页 | aaa午夜| 亚洲小说区图片区都市 | 99色这里只有精品 | 午夜av剧场| 欧美一线高本道 | 久久久久无码精品国产sm果冻 | 欧美影视一区二区三区 | 日韩成人高清在线 | 香港三级日本三级韩国三级 | 日本黄色片 | 国产青青草| 午夜免费视频观看 | 高清不卡一区二区三区 | 日韩在线网址 | 黑人一级视频 | 国产性猛交xx乱 | 一区二区三区日本视频 | 亚洲图片 欧美 | 免费看片成人 | 天天做天天爱天天做 | 一个人在线观看www软件 | 五月天精品视频 | 婷婷亚洲综合 | 欧美熟妇另类久久久久久不卡 | 国产午夜精品久久久久久久 | av永久在线| 新天堂av| 激情五月色婷婷 | 色老头一区 | 亚洲成熟女性毛茸茸 | 欧产日产国产精品 | 中国免费观看的视频 | 欧美精品久久久久 | 日韩小视频在线观看 | 国产精品嫩 | 高清av网址 | 最近免费高清mv | 国产精品白虎 | 黄色片国产 | 成人精品一区二区三区电影 | 成人动漫亚洲 | 欧美一级精品 | www..99热| 午夜免费福利小视频 | 华丽的外出在线 | av网天堂 | 日本一级黄色 | 日韩三级在线 | 日本特级黄色 | 丁香婷婷六月天 | 91午夜免费视频 | 懂色av一区二区在线播放 | 手机免费av | 国产原创中文av | 日韩成人在线免费观看 | 三级黄色av | 一区二区三区中文字幕 | 青青草色视频 | caobi视频| 国产精品视频播放 | 欧美精品日韩在线观看 | av影视在线观看 | 日韩夜夜高潮夜夜爽无码 | 精品久久久久一区 | 色呦呦呦呦 | 国内av网 | 69精品久久 | 午夜做爰xxxⅹ性高湖视频美国 | 天天操天天干天天摸 | 亚洲理论中文字幕 | 黄色污污网站在线观看 | 91中文字幕 | 一区二区三区日韩欧美 | 国产乱子伦一区二区 | 免费日本黄色 | 小嫩女直喷白浆 | 巨物撞击尤物少妇呻吟 | 国产毛片a | 久久精品视频免费看 | 综合久色| 97国产在线播放 | 久久久国产视频 | 黄色大片网站在线观看 | 国产黄色一级 | 欧美老肥婆性猛交视频 | 69er小视频| avtt久久 | 欧美午夜激情影院 | 国产欧美视频一区二区三区 | 亚洲校园激情 | 成人精品一区二区三区电影黑人 | 欧美一卡二卡在线观看 | 中文字幕精品一区二区三区视频 | 看片免费黄在线观看入口 | 亚洲一区二区视频在线观看 | 日韩精品一区二区三区四区五区 | 中文字幕9 | 亚洲第一成年网 |