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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

迷阵

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

迷陣

牛客網 題目鏈接
思路:

二分+寬搜
最小是0 ,最大是3000
二分出mid
for循環i+mid來找答案
寬搜中最小值為1 ,最大值為i+mid
寬搜:從1 , 1 開始搜索
可以走的并且沒有走過的加到queue中
如果可以走到終點,返回true,即這個mid是符合答案的
將ans更新為mid,同時將最大值更新為mid
如果不可以,把最小值更新為mid+ 1

#include <bits/stdc++.h> using namespace std;typedef pair<int , int >PII; const int N = 110; int all[N][N]; int ok[N][N]; int n ; int dx[]= {-1 , 0 ,1 , 0} , dy[] = {0 , 1 , 0 , -1} ;//坐標偏移量bool check(int l , int r) {memset(ok , 0 , sizeof ok);queue<PII> p;p.push({1, 1});ok[1][1] = 1 ;while(p.size()){auto t = p.front();p.pop();int x = t.first , y = t.second;if(x + y == 2 * n ) return true ;//如果可以走到for(int i = 0 ; i < 4 ;i ++){int x1 = x + dx[i] , y1= y + dy[i];if(x1 < 1 || x1 > n || y1 < 1 || y1 > n ) continue;//如果點出界if(ok[x1][y1] == 1) continue;//走過if(l > all[x1][y1] || all[x1][y1]> r) continue;//比最大值大,比最小值小ok[x1][y1] = 1;p.push({x1 , y1});}}return false;}int main() {cin>>n;for(int i = 1 ; i <= n ; i ++){for(int j = 1 ; j <= n ; j ++){cin>>all[i][j];}}int ans = 1e9;int l = 0 , r = 3000;while(l < r){int mid = l + r >>1 ;int o = 0 ;for(int i = 0 ; i <= 3000 -mid ; i ++){int a = i , b = i + mid ;if(a > all[1][1] || b < all[1][1]) continue;//判斷1 , 1 這個點能不能走if(check(a , b ))//判斷{o = 1 ;break;}}if(o == 1 ) {ans = mid;r = mid;}else l = mid + 1 ;}cout<<ans;return 0; }

總結

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

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