【POJ】2329 Nearest number - 2(搜索)
2024-08-25 16:49:21
题目
传送门:QWQ
分析
在dp分类里做的,然而并不会$ O(n^3) $ 的$ dp $,怒写一发搜索。
看起来是$ O(n^4) $,但仔细分析了一下好像还挺靠谱的?
poj挂了,没在poj交,在zoj上交的500ms
P.S. 如果要在poj交还要把多数据改成单数据
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int A[maxn][maxn], num[maxn*maxn], id[], cnt, ok[maxn][maxn], n;
int now[maxn][maxn], ans[maxn][maxn], can[maxn][maxn], vis[maxn][maxn];
int dx[]={,,,-}, dy[]={,-,,}; struct Node{ int x,y,dis,numm; }; bool in(int x,int y){ return x>=&&x<=n&&y>=&&y<=n; } queue<Node> que;
void bfs(int x,int y,int dis,int numm){
que.push((Node){x,y,dis,numm});
while(!que.empty()){
Node a=que.front(); que.pop();
x=a.x; y=a.y; dis=a.dis++; numm=a.numm;
for(int i=;i<;i++){
int px=x+dx[i], py=y+dy[i];
if(!in(px,py) || vis[px][py] || ok[px][py]) continue;
vis[px][py]=; a.x=px; a.y=py;
if(dis< now[px][py]){ans[px][py]=numm;can[px][py]=;now[px][py]=dis;}
if(dis==now[px][py]){can[px][py]++;}
que.push(a);
}
} }
int main(){
int t; scanf("%d",&t);
while(t--){
cnt=; memset(id,,sizeof(id)); memset(num,,sizeof(num)); memset(ok,,sizeof(ok));
memset(ans,,sizeof(ans)); memset(can,,sizeof(can));
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
scanf("%d",&A[i][j]);
if(A[i][j]) id[A[i][j]]=++cnt, num[cnt]=A[i][j], ok[i][j]=;
}
memset(now,,sizeof(now));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(!ok[i][j]) continue;
vis[i][j]=; bfs(i,j,,id[A[i][j]]);
memset(vis,,sizeof(vis));
}
for(int i=;i<=n;i++){
for(int j=;j<n;j++){
if(!ok[i][j] && can[i][j]==) printf("%d ",num[ans[i][j]]);
else printf("%d ",A[i][j]);
}
if(!ok[i][n] && can[i][n]==) printf("%d\n",num[ans[i][n]]);
else printf("%d\n",A[i][n]);
} if(t!=) puts("");
}
return ;
}
最新文章
- Inventor 2014 sp1/sp2激活
- 温习SQL server
- 思科模拟器软件教程---教你如何划分Vlan
- 电脑安装win8.1后 前面板没有声音的解决办法
- vs2005 测试 lua环境
- 解决SMARTFORMS 中table 控件单行跨页的问题
- 用stm32f0x建立新的工程重要步骤
- 关于redis的使用
- JavaScript和JQuery的区别
- Newtonsoft.Json 概述
- day 47 htm-part2
- postgre 导出单表和导入
- P3203 [HNOI2010]弹飞绵羊(LCT)
- 【366】通过 python 求解 QP 问题
- Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满屏幕
- 如何使用SVN
- vue-cli中的webpack配置
- vue 组件 模板input双向数据数据
- Linux基础回想(1)——Linux系统概述
- Http:设置 浏览器中MIME 类型
热门文章
- vue.js 源代码学习笔记 ----- instance index
- webpack 事件触发 按需加载
- [置顶]
 曙光到来,我的新书《Android进阶之光》已出版
- OPEN(SAP) UI5 学习入门系列之三:MVC (下) - 视图与控制器
- 安卓开发 报错 错误:This version of android studio is incompatible with the gradle version used. 的解决
- MySQL开放外部链接
- [转](阿里笔试)使用多线程和sleep函数生成字符串的伪随机排列
- 体验 k8s 的核心功能
- rem自适应原理
- java-文件流正确关闭资源