博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1605:迷宫(DFS)
阅读量:6248 次
发布时间:2019-06-22

本文共 1237 字,大约阅读时间需要 4 分钟。

题目背景

迷宫 【问题描述】

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

【数据规模】

1≤N,M≤5

题目描述

输入输出格式
输入格式:
【输入】

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式:

【输出】

给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。

输入输出样例

输入样例#1:

2 2 1
1 1 2 2
1 2
输出样例#1:
1

AC代码

注意要对起点也进行标记,否则只能拿到70分

不对起点进行标记的被卡的数据:

2 2 01 1 1 2
#include
#define ll long long#define ms(a,b) memset(a,b,sizeof(a))#define INF 0x7f7f7f7fconst int maxn=1e6+10;using namespace std;int mp[10][10];int vis[100][100];int dis[4][2]={
1,0,-1,0,0,1,0,-1};int n,m,t;int ans;void dfs(int x,int y,int fx,int fy){
vis[x][y]=1; if(x==fx&&y==fy) ans++; for(int i=0;i<4;i++) {
int dx=x+dis[i][0]; int dy=y+dis[i][1]; if(!vis[dx][dy]&&!mp[dx][dy]&&dx<=n&&dx>0&&dy<=m&&dy>0) {
dfs(dx,dy,fx,fy); vis[dx][dy]=0; } }}int main(){
ios::sync_with_stdio(false); cin>>n>>m>>t; int sx,sy,fx,fy; cin>>sx>>sy>>fx>>fy; int zx,zy; for(int i=0;i
>zx>>zy; mp[zx][zy]=1; } dfs(sx,sy,fx,fy); cout<
<

转载于:https://www.cnblogs.com/Friends-A/p/10324324.html

你可能感兴趣的文章
Arduino入门之前
查看>>
zoj 1904 Beavergnaw 计算圆柱和圆台的体积
查看>>
整理了一份招PHP高级工程师的面试题(转)
查看>>
学习Raft算法的笔记
查看>>
第十一周编程总结
查看>>
darknet源码学习
查看>>
dl,dt,dd的用法
查看>>
外面的世界很精彩,然而等待你的人却可能已不在
查看>>
华为oj 挑7
查看>>
【吴恩达机器学习】学习笔记——1.5无监督学习
查看>>
使用pjax实现类似github无刷新更改页面url
查看>>
移动端头部meta
查看>>
回溯法
查看>>
memcached(一)--前言
查看>>
Redis客户端集群
查看>>
System系统类常用方法
查看>>
Xqk.Data数据框架使用说明之:使用Xqk.Data的一般步骤
查看>>
HDU_3172_带权并查集
查看>>
centos7 源码安装nginx
查看>>
php 下载word 含图片
查看>>