罗密欧与朱丽叶的迷宫问题_dfs
罗密欧与朱丽叶的迷宫问题 问题描述: 罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗密欧位于迷宫的(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)方格的路。在抵达朱丽叶之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶的转弯次数为最少。每改变一次前进方向算作转弯一次。请设计一个算法帮助罗密欧找出这样一条道路。 罗密欧与朱丽叶的迷宫 .编程任务: 对于给定的罗密欧与朱丽叶的迷宫,编程计算罗密欧通向朱丽叶的所有最少转弯道路。 .数据输入: 由文件input.txt给出输入数据。第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2 个正整数,表示被封闭的房间所在的行号和列号。最后的2 行,每行也有2 个正整数,分别表示罗密欧所处的方格(p,q)和朱丽叶所处的方格(r,s)。 .结果输出: 将计算出的罗密欧通向朱丽叶的最少转弯次数和有多少条不同的最少转弯道路输出到文件output.txt。文件的第一行是最少转弯次数。文件的第2 行是不同的最少转弯道路数。接下来的n行每行m个数,表示迷宫的一条最少转弯道路。A[i][j]=k表示第k步到达方格(i,j);A[i][j]=-1 表示方格(i,j)是封闭的。 如果罗密欧无法通向朱丽叶则输出“No Solution!”。 输入文件示例 input.txt 3 4 2 1 2 3 4 1 1 2 2 输出文件示例 output.txt 6
#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;int dx[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
int map[15][15];
bool visit[15][15];
int n, m;
int st_x, st_y, end_x, end_y;
int mmin = INF, sum, f = 0;void dfs(int x, int y, int con, int st, int dir)
{//printf("%d %d %d %d %d\n", x, y, con, st, dir);//getchar();if (st == sum && x == end_x && y == end_y){f = 1;if (mmin > con)mmin = con;return ;}if (st != sum && x == end_x && y == end_y)return ;if (con >= mmin)return ;for (int i = 0; i < 8; i++){int k = x + dx[i];int l = y + dy[i];if (k >= 1 && l >= 1 && k <= n && l <= m && !visit[k][l] && map[k][l] == 0){visit[k][l] = 1;if (dir == i)dfs(k, l, con, st + 1, i);else dfs(k, l ,con + 1, st + 1, i);visit[k][l] = 0;}}
}int main()
{int t;scanf("%d%d%d", &n, &m, &t);sum = n * m - t - 1;int i, j;for(i = 0; i < t; i++){int a, b;scanf("%d%d", &a, &b);map[a][b] = INF;} scanf("%d%d%d%d", &st_x, &st_y, &end_x, &end_y);for (i = 0; i < 8; i++){memset(visit, 0, sizeof (visit));visit[st_x][st_y] = 1;int k = st_x + dx[i];int l = st_y + dy[i];if (k >= 1 && l >= 1 && k <= n && l <= m && !visit[k][l] && map[k][l] == 0){visit[k][l] = 1;dfs(k, l, 0, 1, i);visit[k][l] = 0;}}if (!f)printf("No Solution!\n");else printf("%d\n", mmin);return 0;
}
罗密欧与朱丽叶的迷宫问题_dfs相关推荐
- 罗密欧与朱丽叶的迷宫问题
罗密欧与朱丽叶的迷宫问题 问题描述: 罗密欧与朱丽叶的迷宫.罗密欧与朱丽叶身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许 ...
- 罗密欧与朱丽叶的迷宫问题(java版带有详细分析与注释)
罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫问题 罗密欧与朱丽叶身处一个 $m×n $的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这 m × n m×n m×n 个房间中有一些房间 ...
- 罗密欧与朱丽叶的迷宫问题----回溯法
罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫.罗密欧与朱丽叶身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许任何人进入.在迷宫中 ...
- 罗密欧与朱丽叶的迷宫
2010-1-26抄题目于此,看何时能有代码解决. 问题描述: 罗密欧与朱丽叶的迷宫.罗密欧与朱丽叶身处一个m×n的迷宫中.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许任 ...
- 算法设计与分析: 5-12 罗密欧与朱丽叶的迷宫问题
5-12 罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫.罗密欧与朱丽叶身处一个 m×n 的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这 m×n 个房间中有一些房间是封闭的,不允许任 ...
- 17084 罗密欧与朱丽叶的迷宫问题
#include <iostream> using namespace std; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h&g ...
- 当罗密欧遇到朱丽叶... ...当指针遇到数组
题目是扯淡. 无视 他们说, 题目要长长长长.... 当罗密欧遇到朱丽叶的时候, 看官们都非常happy... 古典唯美悲情爱情嘛~ 然而捏. 数组遇到指针的时候, 我就差点panic了... 这里特 ...
- 阴暗的底层阶级版罗密欧与朱丽叶——甲贺忍法帖
作为系列的第一篇,终于开始填坑了,总的来说,对于一部动画,我想大体介绍下它是个什么故事(真大体,比如标题,尽量不剧透一些影响观看的东西) 最初接触甲贺忍法帖是小学时动画开播时某电视台的介绍,当时对忍者 ...
- 《罗密欧与朱丽叶》--[英]莎士比亚
<罗密欧与朱丽叶>,作者:[英]莎士比亚 下面是书摘: 人物: 维洛那亲王 帕里斯 少年贵族,亲王的亲戚 蒙太古 凯普莱特 互相敌视的两家家长 罗密欧 蒙太古之子 茂丘西奥 亲王的亲戚 班 ...
最新文章
- GPS-nmealib学习
- 基于STM32CubeMX创建STM32L496ZGTx的工程
- 如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)
- 今后,去踢“大数据足球”
- 《python接口自动化测试》笔记
- Kotlin 的工作原理
- Java 常用对象-System类
- strtol ( )【C语言库函数源代码】
- Android自定义一个时间轴,通过ListView来实现时间轴的效果
- python配置MySQL,需安装MySQL-pyt…
- Matlab/Simulink 自动代码生成 基于模型设计学习教程(2)---- 闪烁灯实验
- 在无处落脚的大海,你就是我的岛屿
- WPF嵌入技术1_嵌入WPF到cad(MFC,win32窗体),Win32API嵌入WPF位置跳走的解决方案
- python股票分析论文_股票分析与资产组合(python)
- C语言转义字符\数字 八进制和十六进制学习
- 牛顿法来解最大似然估计
- 使用Android的Service实现后台定时检测并重启应用
- u大师u盘装系统win7_小U讲解刀客电脑u盘重装系统win7_Win7 教程
- ftp服务器怎么添加文件夹,批量建立文件夹,为Serv_U批量创建用户
- h5页面跳转微信小程序页面