BFS模版程序

本文转自http://so.csdn.net/so/search/s.do?q=bfs&u=cnyali&t=blog

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node{
	int x,y,s;
};
struct node a[10000+10];
int map[101][101],p[101][101],d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main(){
	int i,j,k,m,n;
	int f,l,u,v;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			scanf("%d",&map[i][j]);
	f=0;l=1;
	a[1].x=1;a[1].y=1;a[1].s=0;
	p[1][1]=1;
	while(f<=l){
		f++;
		for(i=0;i<=3;i++){
			u=a[f].x+d[i][0];
			v=a[f].y+d[i][1];
			if(map[u][v] && !p[u][v]){
				a[++l].x=u;
				a[l].y=v;
				a[l].s=a[f].s+1;
				p[u][v]=1;
				if(map[u][v]==2){
					printf("(%d,%d)->%d\n",u,v,a[l].s);
				}
			}
		}
	}
	system("pause");
	return 0;
}
/*
10 10
1 1 1 0 1 1 1 1 1 1
1 0 1 0 1 1 1 1 1 1
1 0 1 0 1 0 0 0 1 1
1 0 1 0 2 0 2 0 1 1
1 0 0 0 0 0 0 0 1 1
1 0 1 0 1 0 1 1 1 1
1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 0 2 1 1 1
1 1 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1
*/
时间: 2024-10-23 05:58:33

BFS模版程序的相关文章

bfs算法模版

bfs算法模版 写过很多bfs题,每次写bfs代码习惯都略有不同,有些糟糕的代码习惯影响了解题速度 下面这份简单的三维bfs可以算是写得比较不错的一份了,以后按这种习惯写,虽然没有写回溯路径,但回溯路径很简单,只要加个fa数组就行了,所以就不加在模版上了 //bfs模版 int X,Y,Z; char ch[maxn][maxn][maxn]; bool vis[maxn][maxn][maxn]; int sx,sy,sz; int ans; int dx[]={-1,1,0,0,0,0};

[kuangbin带你飞]专题一 简单搜索 bfs B - Dungeon Master

B - Dungeon Master You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You c

C++语言笔记系列之二十——模版

1.随意输入两个数x和y,输出最大值max. int max(int x, int y) {return x>y? x:y;} 2.函数模版 (1)用一种或者多种通用类型去表示函数--函数模版. (2)函数模版因为没有详细的数据类型.所以函数模版不可执行. (3)作用:模板就是实现代码重用机制的一种工具,它能够实现类型參数化,即把类型定义为參数, 从而实现了真正的代码可重用性.模版能够分为两类,一个是函数模版.另外一个是类模版. 注:函数模版在调用时必须用详细的类型来替代,使之转换为一个详细函数

设计模式之模版方法模式

1.模版方法模式简介: a.模版方法模式的简单介绍: -  模版方法模式是编程中经常用到模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个算法结构的前提上重新定义该算法的某些特定步骤. b.核心:处理某个流程中的代码已经都具备,但是其中某个节点的代码暂时不能确定.因此,我们采用模版方法模式,将这个节点的代码实现转移给子类中完成.即:处理步骤父类中定义好,具体实现延迟到子类中定义. 2.简单的代码演示: 在 BankTemplateMethod 类中添加

BFS 两个重要性质

对于进行广度优先搜索的队列中,应该始终满足两个性质:   性质1:若队首为第i层拓展到的节点,则队列中最多只能存在第i层和第i+1层的节点,不可能出现3层节点.   性质2:队列中的元素会严格按照层数单调递增,而且会按照入队的先后来判别拓展的优先程度,即先入队的一定是更优先的,而越往后越次之.   通过这两个性质,其实我们就可以更严格更方便更快捷更明确地设计有关BFS的程序,当已经找到一个目标节点,即可以终止程序(or过程). 而对于单调性的优化,则可以使用单调队列.双端队列.优先队列代替普通队

二叉树遍历,推荐

Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes. This is

PHP模板引擎Smarty

不知道从什么时候开始,有人开始对 HTML 内嵌入 Server Script 觉得不太满意.然而不论是微软的 ASP 或是开放源码的 PHP,都是属于内嵌 Server Script 的网页伺服端语言.因此也就有人想到,如果能把程序应用逻辑 (或称商业应用逻辑) 与网页呈现 (Layout) 逻辑分离的话,是不是会比较好呢? 其实这个问题早就存在已久,从交互式网页开始风行时,不论是 ASP 或是 PHP 的使用者都是身兼程序开发者与视觉设计师两种身份.可是通常这些使用者不是程序强就是美工强,如

有向图算法之拓扑排序

拓扑排序的意思: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前.通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列. 一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity).在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程的

夺命雷公狗---微信开发57----微网站之jquery_mobile之入门案例

这节课我们主要用到到jquery_mobile来实现一个点电影播放网站 jquery_mobile(简称JQM)其实就是基于jquery开发出来的一套移动端框架,适应移动用户端市场对浏览与体验从而进一步的提升 jquery_mobile控件介绍 jquery_mobile的语法将各个控件(widget)以data-role的形式定义好样式,使用时直接引用,则可调用适合手机页面显示的样式. juqery_mobile的常用控件如下所示: 我们废话不多说,开始写第一个jquery_mobile的模版