P1605 迷宫

这是一道毒瘤题。。。

这是一道广搜题 bfs 。。。

注释:

1.memcpy(b,a,sizeof(a))

把 a 的值全部复制给 b

memcpy(b,a,sizeof(int)*k)

把 a 中的 k 个元素复制给 b

头文件:#include<cstring>

代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
using namespace std;
int n,m,t,sx,sy,fx,fy,tx,ty,ans=;
bool vis[][]; //表示是否为墙
int dx[]={-,,,},
dy[]={,,-,};
struct pos //结构体 x代表横坐标,y代表纵坐标,used[][]代表是否走过
{
int x,y,used[][]; };
bool pan(int x,int y) //判断是否合法
{
return x>=&&x<=n&&y>=&&y<=m&&vis[x][y]==;
} pos sa;
void bfs()
{
queue<pos>q; //队列
sa.x=sx;
sa.y=sy;
sa.used[sx][sy]=; //标记已走
q.push(sa); //入队
while(!q.empty())
{
pos h=q.front();
q.pop(); //出队
for(int i=;i<=;i++)
{
int xx=h.x+dx[i];
int yy=h.y+dy[i];
if(h.used[xx][yy]||(!pan(xx,yy))) //不可以走
continue ;
if(xx==fx&&yy==fy) //到终点
{
ans++;
continue ;
} sa.x=xx;
sa.y=yy;
memcpy(sa.used,h.used,sizeof(h.used)); //鬼知道这是干什么哒(我知道了)注释1
sa.used[xx][yy]=;
q.push(sa); //新的入队 }
}
}
int main()
{
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
for(int i=;i<=t;i++)
{
cin>>tx>>ty;
vis[tx][ty]=;
} bfs(); //广搜 cout<<ans; return ; }

这还是一道深搜题 dfs 。。。

回顾一下递归回溯算法框架:

int search(int x,int y)
{
if(到目的地) 输出解;
else
for(int i=;i<=算符种数;i++)
{
if(符合条件)
{
保存结果;
search(下一层);
恢复:保存结果之前的状态{回溯};
}
}
}

代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
using namespace std;
int n,m,t,sx,sy,fx,fy,tx,ty,ans=;
bool vis[][];
int dx[]={-,,,},
dy[]={,,-,};
bool pan(int x,int y)
{
return x>=&&x<=n&&y>=&&y<=m&&vis[x][y]==;
} void dfs(int x,int y)
{
if(x==fx&&y==fy)
ans++; for(int i=;i<=;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(pan(xx,yy))
{
vis[xx][yy]=;
dfs(xx,yy);
vis[xx][yy]=;
}
}
}
int main()
{
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
for(int i=;i<=t;i++)
{
cin>>tx>>ty;
vis[tx][ty]=;
}
vis[sx][sy]=;
dfs(sx,sy); cout<<ans; return ; }

P1605 迷宫的更多相关文章

  1. 洛谷 P1605 迷宫

    题目链接 https://www.luogu.org/problemnew/show/P1605 题目背景 迷宫 题目描述 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 ...

  2. 洛谷—— P1605 迷宫

    P1605 迷宫 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在 ...

  3. 洛谷P1605 迷宫——S.B.S.

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  4. 【搜索1】P1605 迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  5. (DFS)P1605 迷宫 洛谷

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  6. P1605 迷宫 dfs回溯法

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  7. 洛谷P1605 迷宫 (DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  8. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  9. P1605 迷宫(洛谷)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...

随机推荐

  1. python中的if __name__ == 'main'

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用: 对于编程语言来说,程序都必须要有一个入口,比如java和c#必须要 ...

  2. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  3. vue2.0 在微信端如何使用本地IP访问项目

    我们会遇到这样的需求,在PC端开发vue脚手架项目,希望在微信端随时浏览页面(如果打包再发布到服务器又太麻烦),怎么办? 思路很简单:保证手机和电脑在同一个IP下,用同一个IP访问项目,这样就可以了: ...

  4. Mac Eclipse安装lombok

    Lombok是一个可以通过注解的形式可以帮助消除一些必须但是显得很臃肿的Java代码的工具,通过使用对应的注解,可以在进行编译源码的时候生成对应的方法,比如类属性的get/set/toString() ...

  5. [工具] Altova UModel® 2017 is a UML tool for software modeling & application development.

    https://cdn.sw.altova.com/v2017sp2a/en/MissionKitEnt2017sp2.exe https://cdn.sw.altova.com/v2017sp2a/ ...

  6. 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框

    参考;https://blog.csdn.net/qq_37746973/article/details/78402812?utm_source=blogxgwz1 https://blog.csdn ...

  7. PHP中递归的实现(附例子)

    递归函数是一种调用自己的函数.写递归函数时要小心,因为可能会无穷递归下去.必须确保有充分的方法来终止递归. 一:使用参数引用完成递归函数.操作的是同一块内存地址. <?php $i=1; fun ...

  8. CString数组和CStringArray

    CStringArray是编译器定义的类型!可以进行一些(如:访问.增.删.改)等操作. 集中单个字符串的操作使用Cstring,集中一批字符串的管理使用CstringArray. 一个是动态,CSt ...

  9. image的srcset属性

    介绍 响应式页面中经常用到根据屏幕密度设置不同的图片.这个时候肯定会用到image标签的srcset属性.srcset属性用于设置不同屏幕密度下,image自动加载不同的图片.用法如下: <im ...

  10. js中级小知识3

    函数: 函数在调用的时候,会形成一个私有作用域,内部的变量不会被外面访问,这种保护机制叫闭包.这就意味着函数调用完毕,这个函数形成的栈内存会被销毁. 有些时候我们不希望他被销毁. 函数归属谁跟它在哪调 ...