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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 2110

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2110 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

終于過了,SHIT,二分+DFS即可,二分區間,根據數字是否在區間內,變成迷宮題了。枚舉第一個格子,二分上界,即可。

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string.h> #include <queue> #include <cmath> #include <vector> using namespace std;const int N=110;int num[N][N]; bool vis[N][N]; int n,up,down; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0} };bool ok(int tx,int ty){if(tx>=1&&tx<=n&&ty>=1&&ty<=n){if(num[tx][ty]>=down&&num[tx][ty]<=up&&!vis[tx][ty])return true;}return false; }bool dfs(int x,int y){if(x==n&&y==n) return true; vis[x][y]=true;int tx,ty;for(int i=0;i<4;i++){tx=x+dir[i][0];ty=y+dir[i][1];if(ok(tx,ty)){if(dfs(tx,ty)) return true;}}return false; }int main(){while(scanf("%d",&n)!=EOF){int r=-1,l=0,m;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&num[i][j]);r=max(num[i][j],r);}}int maxl=r;bool flag; int ans=r-l;for(int i=0;i<=num[1][1];i++){l=num[1][1]; r= maxl;while(l<=r){m=(l+r)/2;up=m,down=i;memset(vis,false,sizeof(vis));if(dfs(1,1)){ans=min(ans,up-down);r=m-1;}elsel=m+1;}}printf("%d\n",ans);}return 0; }

  

轉載于:https://www.cnblogs.com/jie-dcai/p/4298406.html

總結

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

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