博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOI 题库 7084
阅读量:5112 次
发布时间:2019-06-13

本文共 2321 字,大约阅读时间需要 7 分钟。

7084  迷宫问题

描述

定义一个二维数组: 

int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

输入
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
输出
左上角到右下角的最短路径,格式如样例所示。
样例输入
0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0
样例输出
(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)
1 #include "bits/stdc++.h" 2  3 using namespace std; 4 const int maxN = 55 ;  5 const int INF = 2147483647 ; 6 struct Shortest_Path { int x , y ; } SP[ maxN * maxN ] ; 7  8 const int dx [ ] = { 1 , -1 , 0 , 0 } ; 9 const int dy [ ] = { 0 , 0 , -1 , 1 } ;10 typedef long long QAQ ;11 12 int l , ans = INF ;13 14 int mp[ maxN ][ maxN ] ;15 int vis[ maxN ][ maxN ] ;16 17 void Record ( ) {18         for ( int i=0 ; i<5 ; ++i ) {19                 for ( int j=0 ; j<5 ; ++j ) {20                         if ( vis[ i ][ j ] ) {21                                 SP[ ++l ].x = i ; 22                                 SP[ l ].y = j ;23                         }24                          25                 }26         }27 }28 void DFS ( const int xi , const int yi , const int step ) {29         if ( mp[ xi ][ yi ] == 1 || step > ans ) return ;30         if( xi == 4 && yi == 4 ) {31                 ans = min ( ans , step ) ;32                 l = 0 ;33                 Record ( ) ;34                 return ;35         }36         for(int i = 0; i < 4; ++i ) {37                 int xx = xi + dx [ i ] ;38                 int yy = yi + dy [ i ] ;39                 if ( !vis[ xx ][ yy ] && mp[ xx ][ yy ] == 0 ) {40                         if ( xx < 0 || yy < 0 || xx > 4 || yy > 4 ) continue ; 41                         vis[ xx ][ yy ] = true ;42                         DFS( xx , yy , step + 1 ) ;43                         vis[ xx ][ yy ] = false ;44                 }45         }46 }47 48 int main ( ) {49         for ( int i=0 ; i<5 ; ++i ){50                 for ( int j=0 ; j<5 ; ++j ) {51                         scanf ( "%d" , &mp[ i ][ j ] ) ; 52                 }53         }54         vis[ 0 ][ 0 ] = true;55         DFS ( 0 , 0 , 1 ) ;56         for ( int i=1 ; i<=l ; ++i ) 57                 printf ( "(%d, %d)\n" , SP[ i ].x , SP[ i ].y ) ;58         59         return 0;60 }
View Code

2016-10-19 15:39:47

转载于:https://www.cnblogs.com/shadowland/p/5977521.html

你可能感兴趣的文章
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
three.map.control
查看>>
二叉树的深度
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
IOS第17天(3,Quartz2D画板和画线)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
@property中 retain 详解
查看>>
java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合...
查看>>
Python爬虫个人记录(四)利用Python在豆瓣上写一篇日记
查看>>
jdk8 Function
查看>>
第二次作业
查看>>
迷茫中的自己
查看>>
burp suite 的intruder 四种攻击方式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
自定义文本选中样式
查看>>
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
查看>>