青少年软件编程(C语言)等级考试试卷(七级)
分数:100 题数:4
一、编程题(共4题,共100分)
1.
走出迷宫
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
时间限制:1000
内存限制:65536
输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。 接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输出
输出从起点到出口最少需要走的步数。
样例输入
3 3
S#T
.#.
...
样例输出
6
试题编号:20230318-7-01
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:(此题已作答)
考生得分:25
是否评分:已评分
评价描述:
考生答案:
#include <bits/stdc++.h>
using namespace std;
int n,m,p[10008],q[10008],ans[108][108],qx,qy,zx,zy;
char a[108][108];
int xx[5]= {0,1,-1,0,0};
int yy[5]= {0,0,0,1,-1};
void bfs() {
a[qx][qy]='#';
ans[qx][qy]=0;
int head=1;
int tail=1;
p[1]=qx;
q[1]=qy;
while(head<=tail) {
for(int i=1; i<=4; i++) {
int h=p[head]+xx[i];
int l=q[head]+yy[i];
if(a[h][l]!='#'&&h>=1&&l>=1&&h<=n&&l<=m) {
a[h][l]='#';
tail++;
p[tail]=h;
q[tail]=l;
ans[h][l]=ans[p[head]][q[head]]+1;
if(h==zx&&l==zy) {
cout<<ans[h][l]<<endl;
return ;
}
}
}
head++;
}
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>a[i][j];
if(a[i][j]=='S')
{
qx=i;
qy=j;
}
if(a[i][j]=='T')
{
zx=i;
zy=j;
}
}
}
bfs();
return 0;
}
2.
拯救公主
多灾多难的公主又被大魔王抓走啦!国王派遣了第一勇士阿福去拯救她。
身为超级厉害的术士,同时也是阿福的好伙伴,你决定祝他一臂之力。你为阿福提供了一张大魔王根据地的地图,上面标记了阿福和公主所在的位置,以及一些不能够踏入的禁区。你还贴心地为阿福制造了一些传送门,通过一个传送门可以瞬间转移到任意一个传送门,当然阿福也可以选择不通过传送门瞬移。传送门的位置也被标记在了地图上。此外,你还查探到公主所在的地方被设下了结界,需要集齐
K
种宝石才能打开。当然,你在地图上也标记出了不同宝石所在的位置。
你希望阿福能够带着公主早日凯旋。于是在阿福出发之前
202303 C语言7级,2023年3月电子学会C语言编程等级考试七级真题试卷,少儿编程题库,C语言编程真题,电子学会真题