当前位置:网站首页>HNUCM 2022年暑假ACM搜索专项练习
HNUCM 2022年暑假ACM搜索专项练习
2022-08-03 23:28:00 【_rosy】
目录
您好中国
题目描述
小明一天突发奇想,随机生成了一个全部由大写字母组成的方阵。他惊奇地发现这个方阵中包含中国的英文单词“CHINA”。
他希望你能够编写一个程序,能够找出一个由大写字母组成的方阵中所有不同的“CHINA”,要“CHINA”求中五个字母要连续出现,方向可以是上、下、左、右中的任意一个。
例如在下面的4*4的方阵中就包含了两个不同的“CHINA”。一个是第1行第1列到第3列的“CHI”,加上第2行第3列的“N”以及第2行第2列的“A”组成的“CHINA”;还有一个是第1行第1列到第3列的“CHI”,加上第2行第3列的“N”以及第3行第3列的“A”。
CHIA
CANT
GRAC
BBDE
输入
单组输入,每个测试样例包含N+1行。
第1行为方阵的大小N(N<=30)。
第2行到第N+1行用于存储由大写字母组成的方阵,每一行包含N个大写字母。
输出
输出方阵中包含的不同的CHINA的个数。如果一个都没有找到,则输出0。
样例输入 Copy
4
CHIA
CANT
GRAC
BBDE
样例输出 Copy
2
唯一值得注意的就是从字符为‘C’的位置开始dfs,其他的没啥
#include<iostream>
#include<string>
#include<math.h>
#include<algorithm>
#include<map>
#include<set>
#include<string.h>
#include<queue>
using namespace std;
int n,cnt;
char c[31][31];
string str="CHINA";
int vis[35][35];
void dfs(int x,int y,int t){
if(x<0||x>=n||y<0||y>=n)return;
if(t>=5){
cnt++;
return ;
}
if(c[x+1][y]==str[t]){
vis[x+1][y]=1;
dfs(x+1,y,t+1);
vis[x+1][y]=0;
}
if(c[x-1][y]==str[t]){
vis[x-1][y]=1;
dfs(x-1,y,t+1);
vis[x-1][y]=0;
}
if(c[x][y+1]==str[t]){
vis[x][y+1]=1;
dfs(x,y+1,t+1);
vis[x][y+1]=0;
}
if(c[x][y-1]==str[t]){
vis[x][y-1]=1;
dfs(x,y-1,t+1);
vis[x][y-1]=0;
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(c[i][j]=='C'){//从开始位置为C开始dfs
vis[i][j]=1;
dfs(i,j,1);
vis[i][j]=0;
}
}
}
cout<<cnt<<endl;
} 简单迷宫题
题目描述
众多单机小游戏中都有王子救公主的情节,小波也脑补了一个迷宫游戏。现有一大小为n*m二维迷宫,告诉你王子和公主的位置,小波觉得没有点实力是不配当王子的,于是王子每次可以向他的八个方向走一步(即:上、下、左、右、左上、左下、右上、右下)。迷宫中存在一些墙壁(用'#'表示),同时还存在一些陷阱(用'*'表示,在这个游戏中,保证王子能够快速的发现陷阱并绕开,具体见样例),正常可以行走的路用'.'表示,王子的位置用'S'表示,公主的位置用'E'表示。现问你王子有多少条路可以营救公主(当然王子足够聪明,不会回头路)。
输入
第一行,迷宫的大小n、m(n,m<=100)。
接下来输入整个地图。
输出
一行,表示王子有多少种路线可以营救公主。
样例输入 Copy
3 3 *.S *.. *E#
样例输出 Copy
10
#include <bits/stdc++.h>
using namespace std;
char c[105][105];
int vis[105][105];
int dx,dy,cnt,n,m;
int dirx[]={-1,1,0,0,-1,-1,1,1};//在x轴方向上的移动,配合diry使用
int diry[]={0,0,-1,1,-1,1,1,-1};//在y轴上的方向移动
void dfs(int x,int y){
if(x<0||x>=n||y<0||y>=m)return;//溢出直接返回
if(x==dx&&y==dy){//当前点为公主所在点时方案数加1
cnt++;
return;
}
for(int i=0;i<=7;i++){//8个方向遍历
if(c[x+dirx[i]][y+diry[i]]!='*'&&c[x+dirx[i]][y+diry[i]]!='#'&&vis[x+dirx[i]][y+diry[i]]==0){
vis[x+dirx[i]][y+diry[i]]=1;
dfs(x+dirx[i],y+diry[i]);
vis[x+dirx[i]][y+diry[i]]=0;//使用完记得还原
}
}
}
int main(){
cin>>n>>m;
int x,y;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
if(c[i][j]=='S'){//标记王子位置
x=i,y=j;
}
else if(c[i][j]=='E'){//标记公主位置
dx=i,dy=j;
}
}
}
vis[x][y]=1;//这里王子刚开始的位置也一定要标记,不然可能会走回头路
dfs(x,y);
cout<<cnt<<endl;
return 0;
}
小B旅游
题目描述
输入
输出
样例输入 Copy
4 4 2 1 2 1 3 2 3 3 4
样例输出 Copy
4
提示
数据规模:
1<=N<=100000,1<=M<=5000000,1<=P<=10000
#include <bits/stdc++.h>
using namespace std;
int n,m,p;
set<int>se;//用来保存走过的城市数,去重
struct node{
int x,step;
};
vector<int> ve[100005];//表示两个城市的联通信
int vis[100005];//表示是否访问过
void bfs(){
queue<node> q;
node now,next;//当前点和下一个要访问的点
now.x=1,now.step=0;
vis[1]=1;
q.push(now);
while(!q.empty()){
now=q.front(),q.pop();
for(int i=0;i<ve[now.x].size();++i){//bfs一层一层访问,
//ve[now.x].size()表示now.x可以到达哪个城市,也就是和哪个城市是连通的
next.x=ve[now.x][i],next.step=now.step+1;
if(vis[next.x]==0&&next.step<=p){
se.insert(next.x);
vis[next.x]=1;
q.push(next);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m>>p;
for(int i=1;i<=m;++i){
int a,b;
cin>>a>>b;
ve[a].push_back(b);
ve[b].push_back(a);
}
se.insert(1);//以1开始,因为为0是也可以到达自己,
//但是就无法进入dfs的next.step=now.step+1; if判断条件
bfs();
printf("%d\n",se.size());
return 0;
}
边栏推荐
- 【并发编程】ReentrantLock的lockInterruptibly()方法源码分析
- Scala基础【正则表达式、框架式开发原则】
- 【论文阅读】TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve
- 3D Semantic Segmentation - 2DPASS
- Minimized installation of debian11
- 二叉搜索树解决落叶问题
- 响应式织梦模板餐饮酒店类网站
- 射频芯片ATE测试从入门到放弃之参数测试
- Analysys Analysis: The transaction scale of China's online retail B2C market in Q2 2022 will reach 2,344.47 billion yuan
- 剑指offer第22题-链表中倒数第K个节点
猜你喜欢

The salary of soft testers at each stage, come to Kangkang, how much can you get?

(PC+WAP)织梦模板不锈钢类网站

Fluorescein-PEG-CLS, cholesterol-polyethylene glycol-fluorescein scientific research reagent

用两个栈模拟队列

AOSP CameraLatencyHistogram的原理与使用

智能座舱的「交互设计」大战

ML之yellowbrick:基于titanic泰坦尼克是否获救二分类预测数据集利用yellowbrick对LoR逻辑回归模型实现可解释性(阈值图)案例

Creo9.0 绘制中心线

软件测试内卷严重,如何提升自己的竞争力呢?

rosbridge-WSL2 && carla-win11
随机推荐
【论文阅读】TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve
V8中的快慢数组(附源码、图文更易理解)
rsync basic usage
用栈实现队列
【职场杂谈】售前与销售工作配合探讨
P1449 后缀表达式
Unity 截取3D图像 与 画中画PIP的实现
Why do we need callbacks
智能座舱的「交互设计」大战
MiniAPI of .NET6 (14): Cross-domain CORS (Part 1)
射频芯片ATE测试从入门到放弃之参数测试
MCS-51单片机,定时1分钟,汇编程序
Kotlin - extension functions and operator overloading
Creo9.0 绘制中心线
Super perfect version of the layout have shortcut, background replacement (solve the problem of opencv Chinese path)
Analysys Analysis: The transaction scale of China's online retail B2C market in Q2 2022 will reach 2,344.47 billion yuan
P1996 约瑟夫问题
The "interaction design" battle of the smart cockpit
IELTS essay writing template
override学习(父类和子类)