POJ 2329 (暴力+搜索bfs)
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 3943 | Accepted: 1210 |
Description
A distance between two elements Aij and Apq is defined as |i − p| + |j − q|.
Your program must replace each zero element in the matrix with the nearest non-zero one. If there are two or more nearest non-zeroes, the zero must be left in place.
Constraints
1 ≤ N ≤ 200, 0 ≤ Ai ≤ 1000000
Input
Output
Sample Input
3
0 0 0
1 0 2
0 3 0
Sample Output
1 0 2
1 0 2
0 3 0
#include<iostream>
#include<cstdio> using namespace std; int n;
int matri[210][210];
int dx[]={1,1,-1,-1},cx[]={-1,0,1,0};
int dy[]={-1,1,1,-1},cy[]={0,-1,0,1}; bool in_matrix(int x,int y)
{
if(x<0||x>=n) return false;
if(y<0||y>=n) return false;
return true;
} int bfs(int x,int y,int k)
{
if(k>n) return 0; //n*n matrix搜索K次,自己能够特值来理解
if(matri[x][y]||n==1) return matri[x][y]; //数不为0,或仅仅有一个数(即 1*1 矩阵),就输出
int xx,yy,X,Y;
int i,j;
int cnt=0,die=0;
for(i=0;i<4;i++) //对于菱形4条边的搜索,这里是以每边K个数字来写。
{
xx=x+k*cx[i];
yy=y+k*cy[i];
for(j=k;j--;) //相当于for(j=0;j<k;j++),一边k个数,所以搜索k次
{
if(in_matrix(xx,yy)&&matri[xx][yy])
{
if(cnt==1)
{
die=1;
break;
} X=xx;
Y=yy;
cnt++; }
xx+=dx[i];
yy+=dy[i];
}
if(die)
break;
}
if(cnt==0)
return bfs(x,y,k+1);
else if(die)
return 0;
else
return matri[X][Y]; } int main()
{
scanf("%d",&n);
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
scanf("%d",&matri[i][j]); for(int i = 0; i < n; ++i,printf("\n"))
for(int j = 0; j < n; ++j)
printf("%d ",bfs(i,j,1)); return 0;
}
(借鉴大大的思路)
值得学习的是,对于矩阵的逆时针菱形搜索。思考了非常长时间都没有想清楚。
自己能够试一下顺时针,一样的道理哦。
int dx[]={1,1,-1,-1},cx[]={-1,0,1,0};
int dy[]={-1,1,1,-1},cy[]={0,-1,0,1};
主要是这两对数组。用的非常是巧妙!
版权声明:本文博客原创文章。博客,未经同意,不得转载。
POJ 2329 (暴力+搜索bfs)的更多相关文章
- POJ 1166 暴力搜索 即 枚举
e.... 米还是没有读懂题....T_T ..... e.... 这就是传说中的暴力吗....太血腥了....太暴力了...九重for循环....就这么赤裸裸的AC了.... 水是水了点..但是.. ...
- POJ 1129:Channel Allocation 四色定理+暴力搜索
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13357 Accepted: 68 ...
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- HDU 1312 Red and Black --- 入门搜索 BFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- POJ 2182/暴力/BIT/线段树
POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
随机推荐
- vb实现多用户登录
利用vb实现多用户登录,主要是将vb与数据库实现链接,这个问题在作品展中我们的软件“天天迹录”的登录时用到,但是当时自己只是知道有这么个功能,但是那些代码的含义并不明白,在3个月后的我又有机会接触到它 ...
- Unity--关于优化方面的那些事儿(一)
近期做一个小项目,要求包的大小不能超过30M. 晚上做了个小实验,方法的确非常本,只是曾经非常多没懂的地方如今清晰了很多,我是菜鸟!希望本文章对大家有帮助,谢谢! 实验结果: 实验结果: 1.场景中仅 ...
- Cluster Table
对簇表来说,总是要先创建簇段(cluster segment).然后将表关联到cluster segment里.由此可知,簇表也是虚拟表,没有对应的segment,簇表对应的是cluster segm ...
- sql server从一个数据库复制一个表到另一个数据库的方法
分两步进行: 第一步,复制表结构: 在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件, 将新查询编辑器窗口最上面的一句话USE [ ...
- Linux下关于解决JavaSwing中文乱码的情况(转)
前两天在linux中运行java 老是出乱码,很苦恼,后来网上找了好多解决办法.有些可行,有些不可行,今天总结一下. redhed 貌似没出现乱码 本身就jdk就支持中文 红旗linux suse等 ...
- 采用Eclipse中间Maven构建Web项目错误(一)
采用Eclipse中间Maven构建Web工程 1.在进行上述操作时.pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...
- Node.js Tools for Visual Studio
https://www.visualstudio.com/en-us/features/node-js-vs.aspx
- NEON简单介绍
个128位四字寄存器Q0-Q15,32个64位双字寄存器D0-D31,两个寄存器是重叠的,在使用的时候须要特别注意,不小心就会被覆盖掉. NEON的数据类型:无符号整数.有符号整数.未指定类型的整数. ...
- 最大公约数(Greatest Common Divisor)
两个数的最大公约数.一个典型的解决方案是欧几里德,叫欧几里德算法. 原理:(m,n)代表m和nGCD,和m>n.然后,(m,n)=(n,m%n)=.....直到余数为0. 码如下面: publi ...
- Android - 用Fragments实现动态UI - 使用Android Support Library
Android Support Library提供了一个带有API库的JAR文件来让你可以在使用最新的Android API的同时也也已在早期版本的Android上运行.例如,Support Libr ...