挑战程序2.1.4 穷竭搜索>>深度优先搜索
深度优先搜索DFS,从最开始状态出发,遍历一种状态到底,再回溯搜索第二种。
题目:POJ2386
/*
input:
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#.. 表示有13个可以走到的地方(包括原来那一格)。*/
#include <stdio.h>
][];
void solve(int H,int W);
void find1(int H,int W);
void dfs(int x,int y,int H,int W);
int main()
{
int H,W,i;
&&W!=)
{
getchar();
;i<H;i++)
gets(ch[i]);
find1(H,W);
solve(H,W);
}
;
}
void solve(int H,int W)
{
;
;i<H;i++)
;k<W;k++)
if(ch[i][k]=='@')
a++;
printf("%d\n",a);
}
void find1(int H,int W)
{
;i<H;i++)
;k<W;k++)
if(ch[i][k]=='@')
{
dfs(i,k,H,W);
return;
}
}
void dfs(int x,int y,int H,int W)
{
int x1,y1,nx,ny;
ch[x][y]='@';
;x1<=;x1++)
{
nx=x+x1;
&&nx<H&&ch[nx][y]!='#'&&ch[nx][y]!='@')
dfs(nx,y,H,W);
}
;y1<=;y1++)
{
ny=y+y1;
&&ny<W&&ch[x][ny]!='#'&&ch[x][ny]!='@')
dfs(x,ny,H,W);
}
return;
}
POJ2386
练习题系列………………………………………………………
#include <stdio.h>
][];
void solve(int H,int W);
void find1(int H,int W);
void dfs(int x,int y,int H,int W);
int main()
{
int H,W,i;
&&W!=)
{
getchar();
;i<H;i++)
gets(ch[i]);
find1(H,W);
solve(H,W);
}
;
}
void solve(int H,int W)//计数
{
;
;i<H;i++)
;k<W;k++)
if(ch[i][k]=='@')
a++;
printf("%d\n",a);
}
void find1(int H,int W)//找到点
{
;i<H;i++)
;k<W;k++)
if(ch[i][k]=='@')
{
dfs(i,k,H,W);
return;
}
}
void dfs(int x,int y,int H,int W)
{
int x1,y1,nx,ny;
ch[x][y]='@';
;x1<=;x1++)
{
nx=x+x1;
&&nx<H&&ch[nx][y]!='#'&&ch[nx][y]!='@')
dfs(nx,y,H,W);
}
;y1<=;y1++)
{
ny=y+y1;
&&ny<W&&ch[x][ny]!='#'&&ch[x][ny]!='@')
dfs(x,ny,H,W);
}
return;
}
POJ1979
#include <stdio.h>
#include <iostream>
using namespace std;
][];
]={,,,-};
]={,,-,};
int H,W,cou;
void DFS(int x, int y){
;
char b=ch[x][y];
ch[x][y]='.';
; i < ; i++)
{
int xn = x + xx[i], yn = y + yy[i];
&& xn < W && yn >= && yn < H && ch[xn][yn] == b)
{
DFS(xn, yn);
}
}
return ;
}
int main()
{
while(cin >> W >> H && (H && W))
{
cou = ;
; i < W; i++)
; k < H; k++)
cin >> ch[i][k];
; i < W; i++)
; k < H; k++)
if(ch[i][k] != '.')
{
DFS(i, k);
cou++;
}
cout << cou << endl;
}
;
}
AOJ0033
题目:POJ3009
这题撸了很久。
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
]={ , , -, };
]={ , , , -};
][];
int xn,yn,x1,y1,H,W,y2,x2,a;
void dfs(int x1, int y1, int step){
) return ;
; i < ; i++){//四个方向
int xn = x1 + dx[i], yn = y1 + dy[i];
if(xn == x2 && yn == y2){
a=min(a, step + );
continue;
}
)continue;
&& xn < W && yn >= && yn < H){
xn += dx[i]; yn += dy[i];//继续往下面走
&& xn < W && yn >= && yn < H)
{
) continue;//直到撞墙或终点
if(xn == x2 && yn == y2){//到达终点
a= min(a, step + );
return ;
}
map1[xn][yn] = ;//停下来了,继续dfs,注意dfs前后面的墙。
dfs(xn - dx[i], yn - dy[i], step + );
map1[xn][yn] = ;
break;
}
}
}
return ;
}
int main()
{
&& W != ){
; i < W; i++)
; k < H; k++){
cin >> map1[i][k];
){
x1 = i; y1 = k;
map1[i][k] = ;
}
){
x2 = i;
y2 = k;
map1[i][k] = ;
}
}
a = ;
dfs(x1, y1, );
|| a>) cout << "-1" << endl;
else cout << a <<endl;
}
;
}
POJ3009
挑战程序2.1.4 穷竭搜索>>深度优先搜索的更多相关文章
- 挑战程序2.1.5 穷竭搜索>>宽度优先搜索
先对比一下DFS和BFS 深度优先搜索DFS 宽度优先搜索BFS 明显可以看出搜索顺序不同. DFS是搜索单条路径到 ...
- 常用算法2 - 广度优先搜索 & 深度优先搜索 (python实现)
1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...
- 搜索——深度优先搜索(DFS)
设想我们现在身处一个巨大的迷宫中,我们只能自己想办法走出去,下面是一种看上去很盲目但实际上会很有效的方法. 以当前所在位置为起点,沿着一条路向前走,当碰到岔道口时,选择其中一个岔路前进.如果选择的这个 ...
- 【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索
骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列 ...
- python实现广度优先搜索和深度优先搜索
图的概念 图表示的是多点之间的连接关系,由节点和边组成.类型分为有向图,无向图,加权图等,任何问题只要能抽象为图,那么就可以应用相应的图算法. 用字典来表示图 这里我们以有向图举例,有向图的邻居节点是 ...
- 《挑战程序设计竞赛》2.1 穷竭搜索 POJ2718 POJ3187 POJ3050 AOJ0525
POJ2718 Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6509 Acce ...
- 《挑战程序设计竞赛》2.1 深度优先搜索 POJ2386 POJ1979 AOJ0118 AOJ0033 POJ3009
POJ2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25366 Accepted: ...
- matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)
如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...
- 深度优先搜索(dfs)与出题感想
在3月23号的广度优先搜索(bfs)博客里,我有提到写一篇深搜博客,今天来把这个坑填上. 第一部分:深度优先搜索(dfs) 以上来自百度百科. 简单来说,深度优先搜索算法就是——穷举法,即枚举所有情况 ...
随机推荐
- css线性渐变--linear-gradient
使用css直接写渐变,对于现在而言,应该属于比价简单的一件事了,在一定程度上,扁平化的设计趋势的出现,减少了使用渐变色的场景,但是并不影响我们逐渐的熟悉线性渐变Linear-gradient的写法. ...
- MQTT——java简单测试(二)
服务端代码: package bsit.mqtt.demo.one_way; import org.eclipse.paho.client.mqttv3.MqttClient; import org. ...
- JSTL 自定义标签
编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增查询引擎管理
欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 RDIFramework.NET — 基于.NET的快速信 ...
- 给php添加ssl证书
composer下载时报错: The "https://packagist.org/packages.json" file could not be downloaded: SSL ...
- 一些有意思的VR设备介绍
1.计算机(Computers) 不久以前,一个VR系统需要百万美元的超级计算机:而如今顶级的VR系统正在使用桌面便携式计算机簇,极大的降低了价格和维护成本. 2.跟踪器(Tracking) 为了能与 ...
- 【进展】LL谱面存储方式的改善
今天得某位高人相助,获得了一堆LL里面的标准谱面文件,是json格式的.于是折腾了一下午加一晚上,总算让SLP正确解析了json格式的谱面.
- python css基本操作
1. 概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. 存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点. 语法:style ...
- 自定义cell侧滑删除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return Y ...
- sprint 3 总结
1.要求: 演示可参考毕业设计答辩,包含两部分内容: 项目陈述,可综述项目.团队.开发过程等. 运行演示,实现的功能.业务.用户反馈等. 希望各组认真准备,拿出最好的阵容最好的状态,展示一学期的学习与 ...