走出迷宫

简介: 题目链接:http://ica.openjudge.cn/dg3/3/总时间限制: 1000ms   内存限制: 65536kB描述当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。

题目链接:http://ica.openjudge.cn/dg3/3/

总时间限制: 1000ms   内存限制: 65536kB
描述

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输出
输出从起点到出口最少需要走的步数。
样例输入
3 3
S#T
.#.
...
样例输出
6

分析:典型的广搜。注意提前把出发点和目的点的元素修改一下。

 1 #include<stdio.h>
 2 #include<queue>
 3 #include<iostream>
 4 using namespace std;
 5 
 6 struct obj
 7 {
 8     int x,y;
 9     int step;//表示从出发点到达(x,y)需要的步数 
10 };
11 
12 char a[102][102];
13 queue<struct obj> que;
14 struct obj start,destination;
15 int dx[4]={-1,0,1,0};//上右下左
16 int dy[4]={0,1,0,-1};
17 
18 int main(int argc, char *argv[])
19 {
20     int n,m,i,j,xx,yy;
21     struct obj temp,temp2;
22     
23     scanf("%d%d",&n,&m);
24     for(i=0;i<n;i++)
25         scanf("%s",a[i]);
26     for(i=0;i<n;i++)
27     {
28         for(j=0;j<m;j++)
29         {
30             if(a[i][j]=='S') { start.x=i; start.y=j; start.step=0; }
31             else if(a[i][j]=='T') { destination.x=i; destination.y=j; a[i][j]='.'; }
32             //printf("%c",a[i][j]);
33         }
34         //printf("\n");
35     }
36     //printf("%d %d %d\n",start.x,start.y,start.step);
37     //printf("%d %d %d\n",destination.x,destination.y,destination.step);
38     
39     a[start.x][start.y]='#';
40     que.push(start);
41     while(!que.empty())
42     {
43         temp=que.front();que.pop();
44         //printf("%d %d %d ",temp.x,temp.y,temp.step);
45         //printf("%d %d %d\n",destination.x,destination.y,destination.step);
46         if(temp.x==destination.x&&temp.y==destination.y)
47         {
48             destination.step=temp.step;
49             break;
50         }
51         
52         for(i=0;i<4;i++)
53         {
54             xx=temp.x+dx[i];
55             yy=temp.y+dy[i];
56             if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]=='.')
57             {
58                 a[xx][yy]='#';
59                 temp2.x=xx;
60                 temp2.y=yy;
61                 temp2.step=temp.step+1;
62                 que.push(temp2);                
63             }
64         }
65     }
66     printf("%d\n",destination.step);
67     return 0;
68 }

 

相关文章
|
人工智能 小程序 前端开发
【uniapp小程序】uploadFile文件上传
【uniapp小程序】uploadFile文件上传
1881 0
|
5月前
|
存储 JSON JavaScript
模拟权限检查函数中的`checkUserPermission`函数中的角色和权限列表数据可以从哪些地方获取?
模拟权限检查函数中的`checkUserPermission`函数中的角色和权限列表数据可以从哪些地方获取?
191 69
|
JavaScript 前端开发 Ubuntu
nginx部署vue后显示500 Internal Server Error解决方案
nginx部署vue后显示500 Internal Server Error解决方案
873 0
13HUI - 模态对话框(hui.alert、hui.confirm)
13HUI - 模态对话框(hui.alert、hui.confirm)
126 0
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
410 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
199 138
|
9天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
380 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)