深搜的一道水题

https://www.acwing.com/problem/content/844/   正确输入输出

#include<bits/stdc++.h>
using namespace std;
const int N=;
int path[N];
bool vis[N];
int n;
void dfs(int u) {
if(u==n) {
for(int i=; i<n; i++) {
cout<<path[i]<<" ";
}
cout<<endl;
return ; //回溯
}
for(int i=; i<=n; i++) {
if(!vis[i]) { //如果访问过
vis[i]=; //标记
path[u]=i; //记录此时的数字
dfs(u+); //下一步
vis[i]=; //清理现场
path[u]=;
}
}
}
int main() {
cin>>n;
dfs();
return ;
}
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m;
int g[N][N]; //地图
int d[N][N]; //到起点的距离
typedef pair<int,int>PII;
PII q[N*N];//pair
PII Prev[N][N]; //用来记录x,y 这个点从哪个点过来,并输出路径
int bfs() {
int hh=,tt=; //hh 队头 ,tt 队尾
q[]= {,};
memset(d,-,sizeof d); //初始化
d[][]=; //起点到起点的距离为0
int dx[]= {-,,,}, dy[] = {,,,-};
while(hh<=tt) {
auto t = q[hh++]; //取出队头
for(int i=; i<; i++) {
int x=t.first+dx[i],y=t.second+dy[i];
if(x>=&&x<n&&y>=&&y<m&&g[x][y]==&&d[x][y]==-) { //为空地不是障碍物,而且没有走过,
Prev[x][y]=t; //记录从哪个个点过来
d[x][y]=d[t.first][t.second]+; //标记距离
q[++tt]= {x,y}; //在放进去
}
}
}
int x=n-,y=m-;
while(x||y) {
cout<<x<<" "<<y<<endl;
auto t=Prev[x][y];
x=t.first,y=t.second; //输出路径
}
return d[n-][m-];
}
int main() {
cin>>n>>m;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
cin>>g[i][j];
cout<<bfs()<<endl;
return ;
}

AcWing 842. 排列数字的更多相关文章

  1. [AcWing 823] 排列

    点击查看代码 #include<iostream> using namespace std; const int N = 10; int n; void dfs(int u, int nu ...

  2. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP

    dp [ x ] [ y ] [ z ] 表示二进制y所表示的组合对应的之和mod x余数为z的最小数... 如可用的数字为 1 2 3 4...那么 dp [ 7 ] [ 15 ] [ 2 ] = ...

  3. AcWing 230. 排列计数 水题(组合数+错排)打卡

    题目:https://www.acwing.com/problem/content/232/ #include<bits/stdc++.h> #define ll long long #d ...

  4. AcWing 339 .圆形数字

    大型补档计划 题目链接 设 \(f[i][j]\) 表示二进制下,数字有 \(i\) 位, \(0\) 的个数 - \(1\) 的个数 \(=\) \(j\) 的方案数 \(f[0][0] = 1;\ ...

  5. 《挑战程序设计竞赛》——DFS

    DFS(深度优先搜索) 简介 深度优先搜索(DFS,Depth-First Search)是搜索的手段之一.它从某个状态开始,不断的转移状态直到无法转移.然后退回到前一步的状态,继续转移到其他状态,如 ...

  6. 9月19日下午JavaScript数组冒泡排列和二分法

    数组 一.冒泡排列 对数组attr = [1,8,6,4,5,3,7,2,9]进行由大到小排列,用冒泡排列的方法排列时,会对数组进行比较互换.如果前一个数字较大,这2个元素排列方式不变,如果后一个元素 ...

  7. JS数组2(冒泡排列、数组里面查找数据)

    数组 一.冒泡排列 对数组attr = [1,8,6,4,5,3,7,2,9]进行由大到小排列,用冒泡排列的方法排列时,会对数组进行比较互换.如果前一个数字较大,这2个元素排列方式不变,如果后一个元素 ...

  8. js部分总结

    1 currentStyle 可以获取行间样式,但是不兼容 其他浏览器用getComputedStyle(div,null)这个ie低级版本不兼容; if(div.currentStyle){ } e ...

  9. codeforces B. Color the Fence 解题报告

    题目链接:http://codeforces.com/problemset/problem/349/B 题目意思:给定v升的颜料和9个需要花费ad 升的颜料,花费ad 升的颜料意味着得到第d个数字,现 ...

随机推荐

  1. Android实战项目:房贷计算器

    APP源码已上传到我的GitHub:https://github.com/zdm-code/Android-learning/tree/master/android_learning/mortgage ...

  2. Java中的isEmpty方法、null以及""的区别

    本文转自:https://blog.csdn.net/peng86788/article/details/80885814 这是一个比较容易混淆的概念,为了弄清楚这个问题,最好的方法当然是写程序来验证 ...

  3. mac 非安全模式 开启

    https://github.com/callmelaoda/communicate/issues/8 open -a Google\ Chrome --args --disable-web-secu ...

  4. H5-IOS能否自动弹出软键盘

    在ios移动端, 弹出软键盘只能 行为事件才能触发 弹出软键盘, 脚本事件是不能触发 弹出软键盘 (行为事件:如点击,触屏等) (脚本事件:如 定时器定时触发)

  5. Ubuntu 16 服务器配置PHP+MySQL+Apache环境

    一.获取软件包资源并进行资源更新 apt是Ubuntu上默认的软件包管理器,使用它可以很容易进行各种软件安装,而且会自动帮你安装可能需要的依赖关系. 另一个强大的软件管理工具是 dpkg,可以用于安装 ...

  6. Mysql快速入门(三)

    MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...

  7. JNA 使用总结

    JNA 是基于 JNI(Java Native Interface) 技术的开源工具,能够实现单方向的 Java 调用本地方法(通常是 C/C++ 编写的动态链接库中的函数),在 Windows 中是 ...

  8. luogu P2158 [SDOI2008]仪仗队 (欧拉函数)

    欧拉函数裸题 可惜我太久没做题忘了欧拉函数是什么了... 注意判断一下n = 1的情况就好了 #include <cstdio> using namespace std; ; typede ...

  9. 2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问

    1.0 geoip2核心识别库 安装geoip2 lib步骤: cd /usr/local/src .tar.gz wget https://github.com/maxmind/libmaxmind ...

  10. numpy学习(一)

    (一)基础学习 学习渠道:阿里天池AI学习——Numpy基础(传送门) (二)练习篇 练习渠道:Numpy基础100题(Part 1) 1. Import the numpy package unde ...