C语言问题之穿越雷区
X星的坦克战车很奇怪,它必须交替的穿越正能量辐射区和负能量辐射区才能正常运转,否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全去,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
(坦克只能水平或垂直方向上移动到相邻的区。
数据格式要求:
输入第一行是一个整数n,表示方阵的大小,4<=n<100
接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
A, B都只能出现一次。
输出一个整数,表示坦克从A到B的最少步数。如果没有方案则输出-1.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
int w ;//方阵大小
int bx, by, ax, ay;//AB坐标
char map[MAX][MAX];//储存地图
int path[MAX][2];//储存路径
int min=0,a=1;//储存最小步数
int checkPath(int x,int y,int n)//检查是不是绕圈
{
for(int i=0;i<=n;i++)
{
if(path[i][0]==x&&path[i][1]==y)return 0;
}
path[n+1][0]=x;
path[n+1][1]=y;
return 1;
}
void fun(int x, int y, int n, int d)//开始走
{
if (x == bx && y == by) {
for(int i=0;i<=n;i++)
{
printf("%d, %d ,i:%d\n",path[i][0],path[i][1],i);
}
printf("\n");
if(a==1)
{
min=n;
a=0;
}
else min=min<=n?min:n;
} else {
for(int i=1;i<=4;i++)
{
if(i==d)continue;
switch(i)
{
case 1:
if(y - 1 >= 0&&map[y - 1][x] != map[y][x])
if(checkPath(x,y-1,n)==1)
fun(x,y-1,n+1,2);
break;
case 2:
if(y + 1 <= w - 1&&map[y + 1][x] != map[y][x])
if(checkPath(x,y+1,n)==1)
fun(x, y + 1, n+1, 1);
break;
case 3:
if(x - 1 >= 0&&map[y][x - 1] != map[y][x])
if(checkPath(x-1,y,n)==1)
fun(x - 1, y, n+1, 4);
break;
case 4:
if(x + 1 <= w - 1&&map[y][x + 1] != map[y][x])
if(checkPath(x+1,y,n)==1)
fun(x + 1, y, n+1, 3);
break;
}
}
min=-1;
}
}
char getMap()//输入地图
{
char ch;
scanf("%d",&w);
getch();
for(int i=0;i<w;i++)
{
for(int j=0;j<w;j++)
{
do{
scanf("%c",&ch);
}while(ch==' ');
map[i][j]=ch;
}
getch();
}
}
int checkMap()//检查地图
{
int a = 0, b = 0;
for (int i = 0; i < w; i++) {
for (int j = 0; j < w; j++) {
putchar(map[i][j]);
if (map[i][j] != '+' && map[i][j] != '-' && map[i][j] != 'A'
&& map[i][j] != 'B')
return 0;
if (map[i][j] == 'A') {
ax = j;
ay = i;
path[0][0]=j;
path[0][1]=i;
a++;
}
if (map[i][j] == 'B') {
bx = j;
by = i;
b++;
}
}
putchar('\n');
}
if (a == 1 && b == 1)
return 1;
else
return 0;
}
int main() {
getMap();
if (checkMap() == 1) {
printf("A:(%d,%d)\nB:(%d,%d)\n", ax, ay, bx, by);
fun(ax, ay, 0, 0);
printf("最小步数:%d\n",min);
}
return 0;
}
C语言问题之穿越雷区相关推荐
- 蓝桥杯c语言a组2015,2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地 ...
- 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述
标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最 ...
- 穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题
标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径 ...
- 蓝桥杯之穿越雷区 BFS
本题为2015年第六届蓝桥杯C语言A组试题,第4题. 考点:广度优先搜索(BFS) 广搜一般用来解决"最短""最少"问题,需用到队列. 题目描述 标题:穿越雷区 ...
- 蓝桥杯java第六届决赛第四题--穿越雷区
标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短 ...
- 第六届蓝桥杯决赛真题:穿越雷区
题目描述: 穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才 ...
- java实现第六届蓝桥杯穿越雷区
穿越雷区 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能 ...
- 标题 穿越雷区 java_6届国赛java试题 4: 穿越雷区
穿越雷区(BFS) X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路 ...
- 蓝桥杯 2015国赛 穿越雷区
蓝桥杯 2015国赛 穿越雷区 题目链接 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负 ...
最新文章
- 学习 Message(4): 通过 Application.OnMessage 或 TApplicationEvents 响应消息
- (2.10)备份与还原--利用T-SQL进行备份还原
- java Locale 解析方法
- Logistics Regression公式推导
- NOSQL 之 cassadra 安装与集群配置
- c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
- 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
- python中双向索引_对索引Include子句的深入分析
- explain ref_MySQL 性能分析神器 —— EXPLAIN 用法与解读。
- C++是最难的编程语言?为什么这样说?
- php-php异步网络通信引擎-服务发现-消息队列 案例
- Java实现论坛系统
- SAP工厂日历的应用
- PAT-1068 万绿丛中一点红
- BDrate、BDBR、BDPSNR的计算原理和程序
- 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
- 365 水壶问题(递归、数学-裴蜀定理)
- 机器学习实战教程(九):模型泛化
- 瓜瓜的时空旅行,第三次模拟赛,dfs序+线段树维护最小值
- linux下打开chm格式文件
热门文章
- 关于MaxScript 中macroScript 的理解
- android 光线传感器 light sensor的使用
- 快速上手SpringMVC
- 微软投屏器 android,微软 Your Phone 新功能:可同时投屏多款 Android 应用
- 月考分析五年级英语html,小学英语五年级试卷分析
- STM32进阶:使用STM32驱动ST7735S(内附核心源码)
- MySQL数据库同步数据到Oracle
- python中赋值语句的例子_python赋值语句规则
- 这样操作就不会出现cad转换成jpg不清楚
- mysql 可重复读_mysql 可重复读