广搜(初见)

以下是广搜

题意:输入一个n*n的迷宫,输入从起点到终点的最短路

输入:

12  //迷宫大小
2 9 11 8 //起点和终点
1 1 1 1 1 1 1 1 1 1 1 1  //邻接矩阵,0表示通,1表示不通
1 0 0 0 0 0 0 1 0 1 1 1
1 0 1 0 1 1 0 0 0 0 0 1
1 0 1 0 1 1 0 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 0 1
1 0 1 0 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 0 1 0 1
1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1

输出:

(2,9)->(3,9)->(3,8)->(3,7)->(4,7)->(5,7)->(5,6)->(5,5)->(5,4)->(6,4)->(7,4)->(7,3)->(7,2)->(8,2)->(9,2)->(9,3)->(9,4)->(9,5)->(9,6)->(8,6)->(8,7)->(8,8)->(9,8)->(9,9)->(10,9)->(11,9)->(11,8)
27


代码:

#include<cstdio>
using namespace std;
int dwax[4]={0,0,1,-1},dway[4]={1,-1,0,0};
int n,m,state[2501][2],father[2501],px,py,x,y,head,tail,s;
bool a[51][51];
void write(int x,int dep)
{
if (x==0) return;//如果到x则0则为返回完毕
s++;
write(father[x],dep+1);//返回
printf("(%d,%d)",state[x][0],state[x][1]);//输出路径
if (dep!=0) printf("->");
}
void bfs()
{
head=0;//预处理
tail=1;
do
{
head+=1;//出队
x=state[head][0];
y=state[head][1];
for (int i=0;i<4;i++) if (!a[x+dwax[i]][y+dway[i]] && x+dwax[i]<=n && y+dway[i]<=n && x+dwax[i]>=1 && y+dway[i]>=1)//判断是否可以通行{tail++;//入队father[tail]=head;state[tail][0]=x+dwax[i];state[tail][1]=y+dway[i];a[x+dwax[i]][y+dway[i]]=true;//封路if (x+dwax[i]==px && y+dway[i]==py)//判断终点{write(tail,0);return;}} }while (head<tail);//如果队列空了则退出} 
int main()
{scanf("%d%d%d%d%d",&n,&x,&y,&px,&py);int q=0;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){scanf("%d",&q);if (q==1) a[i][j]=true;}//以上为输入不解释state[1][0]=x;state[1][1]=y;a[x][y]=true;bfs();printf("\n%d",s);
}

题目2:骑士旅行

在一个n m 格子的棋盘上,有一只国际象棋的骑士在棋盘的左下角 (1;1)(如图1),骑士只能根据象棋的规则进行移动,要么横向跳动一格纵向跳动两格,要么纵向跳动一格横向跳动两格。 例如, n=4,m=3 时,若骑士在格子(2;1) (如图2), 则骑士只能移入下面格子:(1;3),(3;3) 或 (4;2);对于给定正整数n,m,I,j值 (m,n<=50,I<=n,j<=m) ,你要测算出从初始位置(1;1) 到格子(i;j)最少需要多少次移动。如果不可能到达目标位置,则输出"NEVER"。


输入:

5 3

1 2

输出:

3


代码:

#include<cstdio>
using namespace std;
int dwax[8]={1,1,-1,-1,2,2,-2,-2},dway[8]={2,-2,2,-2,1,-1,1,-1};
int n,m,state[2501][3],father[2501],px,py,x,y,head,tail,s;
bool a[51][51];
void write(int x)//检测bug的攻击
{if (x==0) return;s++;write(father[x]);printf("[%d , %d]->[%d , %d]\n",state[father[x]][0],state[father[x]][1],state[x][0],state[x][1]);//输出路径
}
void bfs()
{head=0;//初始化不解释tail=1;do{head+=1;//出队x=state[head][0];y=state[head][1];for (int i=0;i<8;i++) if (!a[x+dwax[i]][y+dway[i]] && x+dwax[i]<=n && y+dway[i]<=m && x+dwax[i]>=1 && y+dway[i]>=1)//判断可否通行{tail++;father[tail]=head;state[tail][0]=x+dwax[i];state[tail][1]=y+dway[i];state[tail][2]=state[head][2]+1;a[x+dwax[i]][y+dway[i]]=true;//封路if (x+dwax[i]==px && y+dway[i]==py){//write(tail);s=state[tail][2];return;}} }while (head<tail);//空队列结束广搜
} 
int main()
{scanf("%d%d%d%d",&m,&n,&px,&py);state[1][0]=1;state[1][1]=1;state[1][2]=1;a[1][1]=true;//输入初始化不解释bfs();if (head==tail) printf("NEVER");else printf("%d",s-1);//输出不解释
}

题目3:翻币问题

有N个硬币(6<=N<=20000)全部正面朝上排成一排,每次将其中5个硬币翻过来放在原位置,直到最后全部硬币翻成反面朝上为止。试编程找出步数最少的翻法,输出最少步数及翻法。


输入:

6

输出:

6


代码:

#include<cstdio>
using namespace std;
int state[20001],father[20001],head,tail,s,n;
bool ok[20001];
void print(int x)//返回输出
{if (x==0) return;print(father[x]);//printf("%d:%d\n",s,state[x]);s++;
}
void bfs()
{state[1]=n;head=0;tail=1;do{head++;//出队for (int i=0;i<=5;i++)//翻得硬币正面个数if (state[head]>=i && n-state[head]>=5-i)//如果正面和反面数量足够{tail++;//入队father[tail]=head;//记录父节点state[tail]=state[head]-i+5-i;//翻if (ok[state[tail]])//判断有没有重复{tail--;continue;}ok[state[tail]]=true;//封if (state[tail]==0)//判断结束{print(tail);return;}}}while (head<tail);//结束队列
}
int main()
{scanf("%d",&n);bfs();printf("%d",s-1);//输出
}


题目4:最优乘车

H城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。 
一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路已士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园。 
现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1…S公园巴士站的编号为N。 
写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到S公园的过程中换车的次数最少。 


题目很烦是吧!抓狂


输入:

3 7
6 7
4 7 3 6
2 1 3 5

输出:

2


代码:

#include<cstdio>
using namespace std;
int a,k,bus[101][101],num[101][101],state[10001][3],head,tail,s,n,m;
char c;
bool ok[101];
void bfs()
{head=0;tail=1;state[1][0]=0;state[1][1]=1;state[1][2]=0;//初始化不解释do{head++;for (int i=1;i<=num[state[head][1]][0];i++)//枚举当前站可以到达的站{if (ok[num[state[head][1]][i]]) continue;//去重ok[num[state[head][1]][i]]=true;//封tail++;state[tail][1]=num[state[head][1]][i];state[tail][0]=state[head][0]+1;//状态读入if (state[tail][1]==n)//判断结束{s=state[tail][0];return;}}}while(head<=tail);
}
int main()
{scanf("%d%d",&m,&n);scanf("\n");for (int i=1;i<=m;i++){while ((c=getchar())!='\n'){if (c!=' ') a=a*10+c-48;//读取数字else {k++;bus[i][k]=a;//记录该公交线for (int j=1;j<k;j++) {num[bus[i][j]][0]++;num[bus[i][j]][num[bus[i][j]][0]]=a;//记录该点可以到达哪站}a=0;}}k++;bus[i][k]=a;for (int j=1;j<k;j++) {num[bus[i][j]][0]++;num[bus[i][j]][num[bus[i][j]][0]]=a;}//最后一个的处理a=0;bus[i][0]=k;k=0;}//以上为预处理bfs();if (s==0) printf("NO");else printf("%d",s-1);
}

好了,初见题就那么多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Core 图片文件上传下载

当下.Net Core项目可是如雨后春笋一般发展起来&#xff0c;作为.Net大军中的一员&#xff0c;我热忱地拥抱了.Net Core并且积极使用其进行业务的开发&#xff0c;我们先介绍下.Net Core项目下实现文件上传下载接口。 一、开发环境 毋庸置疑&#xff0c;宇宙第一IDE VisualStu…

JavaFX官方教程(九)之转换

翻译自 Transformations Overview 本章介绍JavaFX中支持的转换。 所有转换都位于javafx.scene.transform包中&#xff0c;并且是类的子Transform类。 介绍转换 变换根据某些参数改变坐标系中图形对象的位置。JavaFX支持以下类型的转换&#xff1a; 翻译 回转 缩放 剪毛 …

《金色梦乡》金句摘抄(十)

System.out.println("《金色梦乡》"); System.out.println("小说类型的书就是比散文类型的书好看"); System.out.println("通俗易懂"); System.out.println("这周能看完");“面对遭受迫害的人&#xff0c;有人选择拯救&#xff0c;有人…

stream流把list转为map

1.对象中的属性转map 通过Collectors.toMap list.stream().collect(Collectors.toMap(Person::getId,Person::getName)); 2.收集对象本身 list.stream().collect(Collectors.toMap(Person::getId,list->list)

广搜(练习4题)

几道例题还比较简单&#xff0c;练习就卡了比较长的时间了(。_。) 所以我会写一下解题思路了(๑ŐдŐ) 还有博客抽风所以代码里会有一些奇奇怪怪的东西&#xff0c;无视就好了qwq。 这几道题我就按各人认为的难易程度来排序吧QAQ。 第一题. 题意&#xff1a;输入一个迷宫&…

谈一下我们是怎么做数据库单元测试(Database Unit Test)的

背景介绍 最近在团队在做release之前的regression,把各个feature分支merge回master之后发现DB的单元测试出现了20多个失败的test cases。之前没怎么做过DB的单元测试&#xff0c;正好借这个机会熟悉一下写DB单元测试的流程。 这篇博文中首先介绍一下在我们的特定项目场景中是…

JavaFX官方教程(十)之转换类型和示例

翻译自 Transformation Types and Examples 本文档描述了特定的转换并提供了代码示例。 转换 平移变换沿着相对于其初始位置的一个轴将节点从一个位置移动到另一个位置。木琴条的初始位置由x&#xff0c;y和z坐标定义。在实施例2-1中&#xff0c;初始位置值由指定的xStart&a…

ssl2293-暗黑游戏【dp练习题】

题目&#xff1a; 暗黑游戏中&#xff0c;装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备&#xff0c;每件有不同的价格&#xff08;Pg和Rune&#xff09;、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家&#xff0c;当然希望使用尽可能…

java知识点整理

1.char类型可以整型类型的值 2.变量的命名规则&#xff1a; (1)由字母、、$ 开头的 (2)后面部分可以拾字母、数字、下划线、$ (3)不能是java的关键词 (4)变量名要有意义 3.0是偶数 4.数据类型转换规则&#xff1a; int(源类型) a 1.0(目标类型); (1)源类型大于目标类型&#…

比特(bit)和字节(byte)(1byte=8bit)

一个0或者一个1存储为一个比特(bit)&#xff0c;是计算机中最小的存储单位。 计算机中是最基本的存储单元是字节(byte) 。每个字节由8个比特构成。

定位

绝对定位 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>.div1{height: 200px;width: 200px;background-color: gray;/*绝对定位 基于父级标签原点移开以后会自动释放父级标签原点位置*/po…

Web前端知识体系精简

Web前端技术由html、css和javascript三大部分构成&#xff0c;是一个庞大而复杂的技术体系&#xff0c;其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入&#xff0c;然后不断地接触和学习新的知识点&#xff0c;因此对于初学者很难理清楚整个体…

JavaFX官方教程(十一)之动画基础

翻译自 动画基础 动画基础提供基本动画概念&#xff0c;包含以下部分&#xff1a; 转变 时间线动画 插值 JavaFX中的动画可以分为时间轴动画和过渡。本章提供了每种动画类型的示例。 Timeline并且Transition是javafx.animation.Animation该类的子类。有关特定类&#xff…

《金色梦乡》金句摘抄(十一)

System.out.println("《金色梦乡》"); System.out.println("小说类型的书就是比散文类型的书好看"); System.out.println("通俗易懂"); System.out.println("今天准备看完");从一开始他就觉得难以置信&#xff0c;感觉就像是身处迷雾当…

ssl2295-暗黑破坏神【dp练习】

题目&#xff1a; 无聊中的小x玩起了Diablo I... 游戏的主人公有n个魔法 每个魔法分为若干个等级&#xff0c;第i个魔法有p[i]个等级(不包括0) 每个魔法的每个等级都有一个效果值&#xff0c;一个j级的i种魔法的效果值为w[i][j] 魔法升一级需要一本相应的魔法书 购买魔法书…

内存VS硬盘

一个程序和它的数据在被CPU执行前必须移到计算机的内存 中。 原因 内存存取数据的速度比硬盘的存取速度快10倍&#xff0c;在某些环境里&#xff0c;硬盘和内存之间的速度差距可能会更大。而CPU的速度比内存不知还要快多少倍。当我们把程序从硬盘放到内存以后&#xff0c;CPU…

依赖注入之Autofac使用总结

依赖倒置&#xff1f;控制反转&#xff08;IOC&#xff09;? 依赖注入&#xff08;DI&#xff09;&#xff1f; 你是否还在被这些名词所困扰&#xff0c;是否看了大量理论文章后还是一知半解了&#xff1f; 今天我想结合实际项目&#xff0c;和正在迷惑中的新手朋友一起来学…

JavaFX官方教程(十二)之树动画示例

翻译自 树动画示例 本章提供有关树动画示例的详细信息。您将了解场景中的所有元素是如何创建和动画的。 图4-1显示了带树的场景。 图4-1树动画 项目和要素 树动画项目由几个文件组成。每个元素&#xff0c;如树叶&#xff0c;草叶等&#xff0c;都是在不同的类中创建的。在…

《走遍中国》珍藏版(一)

Console.WriteLine("上一本书已经看完&#xff0c;从今天开始看下一本"); System.out.println("《走遍中国》珍藏版"); System.out.println("这本书是关于地理的"); System.out.println("地理往往是和历史进行紧密联系的");北京、天津…

MySQL建表,DML,DDL,约束,外键策略

创建数据库表 CREATE TABLE student( sno int (6), sname VARCHAR(10), sex CHAR(1), age INT(2), enterdate date, classname VARCHAR(10), email VARCHAR(15) ); – 查看表的结构 desc student – 查看表的数据 SELECT * FROM student DML – 查询表的数据 SELECT * FRO…