洛谷P1443马的遍历】的更多相关文章

题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.pair<,>可以将两个数据类型压缩成一个数据压进队列里,在表示二维坐标时好用. 2.setw()可以设置输出的宽度,left可以设置为左对齐. 代码: #include <iostream> #include <queue> #include <iomanip>…
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 复制 3 3 1 1 输出样例#1: 复制 0 3 2 3 -1 1 2 1 4 思路:搜索. #include<queue> #include<…
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> using namespace std; struct xy {//定义结构体 int x,y;//x,y两个方向 } node,Top; ]={,-,,-,-,,-,}; ]={,,-,-,,,-,-};//马走的八个方向 ][]; ][]; int n,m; void bfs(int x,int y,in…
终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历到这个点的时候顺便给他赋值就好啦 这样肯定是最优解 上代码: #include<bits/stdc++.h> using namespace std; ][],ax[]={,,,,-,-,-,-},ay[]={,,-,-,-,-,,}; queue <int> q; void bfs(…
题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入格式 一行四个数据,棋盘的大小和马的坐标 输出格式 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入 #1复制 3 3 1 1 输出 #1复制 0 3 2 3 -1 1 2 1 4 题解 此题是典型的BFS问题.不过和01迷宫问题有两…
题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 复制 3 3 1 1 输出样例#1: 复制 0 3 2 3 -1 1 2 1 4 主要是BFS的思想(毕竟是BFS经典题QwQ)我们直接通过注释来理解叭 #…
传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %md(现在是右对齐) 左对齐:%-md cout:cout<<left<<setw(m)<<"你要输出的东西balabala"<<endl;(左对齐) cout<<right<<setw(m)<<"…
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 复制 3 3 1 1 输出样例#1: 复制 0 3 2 3 -1 1 2 1 4 思路:裸bfs,输出的时候比较坑是%-5d 代码: #include<cstdio> #in…
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 复制 3 3 1 1 输出样例#1: 复制 0 3 2 3 -1 1 2 1 4 思路:这种题的话用宽搜和广搜都可以,我的思路是每次读取它周围的(能到达的八个方向),在边界内并且未到达过…
https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 3 3 1 1 输出样例#1: 0 3 2 3 -1 1 2 1 4 #include &…
这个题是个搜索,而且有是最少的步数,肯定就是广搜啦,不知道为什么的同学先去学习一下广搜吧. 养成好习惯,看见最少步数就去想想广搜(只是我自己觉得) 竟然这个题可以如此顺畅的想到广搜,感觉不难啊,但还有一个奇怪的地方, emm,这个有点冷门啊,没事,讲讲(百度一下)就知道了. 奉上百度答案:printf("%-5d",x); 这句话的意思就是左对齐,宽5格,输出x. 到这里我们几乎就全讲完了(我讲的好水,听不的懂的同学去隔壁dgdger的博客看看吧,传送门) 广搜嘛,我直接附上之前讲广搜…
略有收获的bfs,使用了try_enqueue函数使得加入队列非常方便.性能理论上是一样的因为是inline? 还有就是左对齐是使用%-4d,相对于右对齐的%4d,还有右对齐前导零的%04d,自己试一下呗. #include<bits/stdc++.h> using namespace std; #define ll long long int n,m,sx,sy; ][]; struct QueueNode{ int x,y,t; QueueNode(,,):x(x),y(y),t(t){}…
题目链接:https://www.luogu.org/problemnew/show/P1443 题意: 给一个n*m的棋盘,马在上面走(规则就是象棋中的规则,详细见代码dx,dy数组定义) 问棋盘上每个点马都需要走几步到达. 思路: 简单bfs.注意输出应该用%-5d(不加空格) #include<stdio.h> #include<stdlib.h> #include<map> #include<set> #include<iostream>…
  1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 que[#][2] 表示(1,1)可到达点的 y 坐标 que[#][3] 表示(1,1)可到达点的 最少步数 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #inc…
题目:https://www.luogu.org/problemnew/show/P1443 简单的BFS模板题——因为我写出来了. 分析过程: n*m矩阵,用二维数组 数据不大,二维数组稳了 先把二维数组初始化为-1,马的坐标,即起点的坐标再设为0 接着开始遍历——8个方向(下过中国象棋的大牛应该不陌生) 设一个结构,储存落点的位置与所走的步数,每走一次就记录一次 此时,还要判断落点是否还是-1,这样就可以避免重复 本来这样就可以AC了,但此题有个陷阱就是: 输出格式: 一个n*m的矩阵,代表…
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 3 3 1 1 输出样例#1: 0 3 2 3 -1 1 2 1 4 一道比较明显的广度优先搜索题,可以发现,起始点值为0,当马第一次跳到哪个点时就是哪个点应该标记的值,并且后续跳到同一…
P1443 所属知识点:BFS 传送门 题意 : 给你一个矩阵和一匹马一开始的位置.然后问你在这个矩阵里边跳到每一个点需要多少步. 思路: 因为一匹马从一个点可以跳到的位置如下图: 画的不好请见谅... 我们就可以开始进行bfs了,最好的板子题. 然后最后输出的时候因为要留5个长宽. 可以这样搞: cout << setw(5) << std::left << maze[i][j]; code: #include <bits/stdc++.h> #inclu…
题目描述 给出 NN 个点, MM 条边的有向图,对于每个点 vv ,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点. 解题思路 看起来很简单的一道题, 但我依然调了一天,我还是太菜了 审题从一个点出发到达编号最远的点,其实可以反向优化为从最远的点出发可以到达哪些点, 这样每个点只需要遍历一次即可 然而以上是看题解才知道 我好菜啊 代码 #include<iostream> #include<cstring> #include<cstdio> #inc…
题目传送门 图的遍历 题目描述 给出 N 个点, M条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 N,M . 接下来 M行,每行2个整数 Ui​,Vi​ ,表示边 (Ui​,Vi​) .点用 1,2,⋯,N 编号. 输出格式: N 个整数 A(1),A(2),⋯,A(N) . 输入输出样例 输入样例#1: 复制 4 3 1 2 2 4 4 3 输出样例#1: 复制 4 4 3 4 说明 • 对于60% 的…
题目描述 有一个n*m的棋盘(1< n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 输入输出样例 输入样例#1: 3 3 1 1 输出样例#1: 0 3 2 3 -1 1 2 1 4 基础的宽搜,最后注意输出-1的问题.. 我的思路是把除了起始点的0都换成-1 不过memset -1也可以 //W…
题目来源 做这道题的方法不少. 在这里我只提一种 就是大法师. 可以采用反向建边,从最大的点开始dfs 我们考虑每次从所剩点中最大的一个点出发,我们暂且称它为i,而凡是i这个点所能到达的点,可以到达的点最大都是i. 在遍历的时候按n——>1的顺序 因为是从大到小遍历,故每个点第一次被碰到的i一定是这个点最大可到达的点 代码如下 #include<iostream> #define maxx 500010 using namespace std; int n,m; struct pp {…
题面 思路: 反向建边,dfs艹咋想出来的啊 倒着遍历,如果你现在遍历到的这个点已经被标记了祖先是谁了 那么就continue掉 因为如果被标记了就说明前面已经遍历过了 而我们的顺序倒着来的 前边的一定比现在的大 所以continue掉 #include <cstdio> #include <cstring> #include <iostream> using namespace std; ; int n, m, head[N], cnt, ans[N]; struct…
P3916 图的遍历 输入输出样例 输入 4 3 1 2 2 4 4 3 输出 4 4 3 4 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.Vector; public class 图的遍历 { static Vector<Vector<Integer>…
同样是一个bfs水题... #include <bits/stdc++.h> using namespace std; typedef pair<int, int> St; St start; queue<St> sts; map<St, int> dist; int n, m, x, y; const int dx[] = {-1, 1, 2, 2, 1, -1, -2, -2}; const int dy[] = {2, 2, 1, -1, -2, -2…
题目描述 分别枚举两个矩阵?那样n^6太要命了. 可以枚举两个矩形的交点 将交点看成原点,可以将整个区域分成四个象限,1与3对应,2与4对应 再枚举相对应的象限计算可以获得的利益,用hash判重 可枚举不同的象限时还要把hash清零,n^2次的memset就超时了... 那怎么继续优化呢? 可以用一个栈记录hash里增加的值,只把这些值清零就好了. #include<complex> #include<cstdio> using namespace std; ,M=1e6+; in…
题目链接:https://www.luogu.org/problemnew/show/P3916 题目大意 略. 分析 以终为始,逆向思维. 代码如下 #include <bits/stdc++.h> using namespace std; #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define Rep(i,n) for (int i = 0; i < (n); ++i) #define Fo…
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d|N}C(N,d)}(\mod999911659)\) 乍一看,指数这么大,要怎么处理好呢?上费马小定理. 平时用费马小定理求逆元用多了,\(a^{p-2}\equiv inv(a)(\mod p)\),搞得蒟蒻差点忘了它原本的样子\(a^{p-1}=1(\mod p)\),那原式的指数\(\sum…
[洛谷P2363]马农 题目描述 在观看完战马检阅之后,来自大草原的两兄弟决心成为超级"马农",专门饲养战马. 兄弟两回到草原,将可以养马的区域,分为N*N的单位面积的正方形,并实地进行考察,归纳出了每个单位面积可以养马所获得的收益.接下来就要开始规划他们各自的马场了.首先,两人的马场都必须是矩形区域.同时,为了方便两人互相照应,也为了防止马匹互相走散,规定两个马场的矩形区域相邻,且只有一个交点.最后,互不认输的两人希望两个马场的收益相当,这样才不会影响他们兄弟的感情.现在,兄弟两找到…
点此看题面 大致题意: 一个由\(R*C\)间矩形宫室组成的宫殿中的\(N\)间宫室里埋藏着宝藏.由一间宫室到达另一间宫室只能通过传送门,且只有埋有宝藏的宫室才有传送门.传送门分为3种,分别可以到达同行的任一宫室(横天门).同列的任一宫室(纵寰门)和以该宫室为中心周围8个的任一宫室(自 由 门).现在你可以从任一宫室开始寻宝,并可以在任一宫室结束寻宝,请求出最多可获得的宝藏数目(每个宝藏只能获得一次). 一个简单的想法 显然,我们可以将每个宫室与它能到达的宫室之间连一条边.由于可能会出现环,我们…
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过河卒". 棋盘用坐标表示,AA点(0, 0)(0,0).BB点(n, m)(n,m)(nn, mm为不超过2020的整数),同样马的位置坐标是需要给出的. 现在要求你计算出卒从AA点能够到达BB点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步. 输入格式…