深搜的一道水题

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日期时间控件DatePickerDialog和TimePickerDialog

    1.DatePickerDialog 在一些万年历.日程表等APP上我们经常可以看到日期选择控件,由于很少有用户会老老实实的手工输入日期,所以该控件的作用就是为了控制用户的输入格式,在Android中 ...

  2. SOA分析浅谈

    根据百度定义:面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服 ...

  3. 跨站请求伪造(Cross-site request forgery), 简称为 XSRF

    跨站请求伪造(Cross-site request forgery), 简称为 XSRF,是 Web 应用中常见的一个安全问题.前面的链接也详细讲述了 XSRF 攻击的实现方式. 当前防范 XSRF ...

  4. JS中axios使用注意点

    今天遇到这样一个问题,前端会同时弹出成功和失败的两个提示框,由于不是本人操作,也没有怀疑是前端代码的问题,就索性根据后端的日志作为分析依据,开始个人以为是后端接口上班了两次结果,一个是成功,另外一个是 ...

  5. LaTeX绘图

    http://math.uchicago.edu/~weinan/programs/tex_diagrams/diagrams.html 给大家分享下这个,用鼠标画diagrams,然后可以一键复制l ...

  6. windows上快速新建1g的文件

    在E盘新建1g文件 fsutil file createnew d:\b.txt 1073741824

  7. socket编程执行远程命令实现_python

    一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...

  8. redis安装并设置开机启动

    1.下载并上传redis安装包至linux服务器目录:/usr/local/redis. 2.解压:tar -zxvf redis-5.0.7.tar.gz 3.编译安装:make && ...

  9. [P1361] 小M的作物 - 最小割

    没想到今天早上的第一题网络流就血了这么多发 从经典的二选一问题上魔改 仍然考虑最小割 #include <bits/stdc++.h> using namespace std; #defi ...

  10. (转)最小Hash和局部敏感Hash

    转自:http://www.07net01.com/2015/08/907327.html 在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度.关于这个问题,最笨的方法就是用一个两重循环来遍 ...