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语言问题之穿越雷区相关推荐

  1. 蓝桥杯c语言a组2015,2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)

    X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地 ...

  2. 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述

    标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最 ...

  3. 穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题

    标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径 ...

  4. 蓝桥杯之穿越雷区 BFS

    本题为2015年第六届蓝桥杯C语言A组试题,第4题. 考点:广度优先搜索(BFS) 广搜一般用来解决"最短""最少"问题,需用到队列. 题目描述 标题:穿越雷区 ...

  5. 蓝桥杯java第六届决赛第四题--穿越雷区

    标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短 ...

  6. 第六届蓝桥杯决赛真题:穿越雷区

    题目描述: 穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才 ...

  7. java实现第六届蓝桥杯穿越雷区

    穿越雷区 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能 ...

  8. 标题 穿越雷区 java_6届国赛java试题 4: 穿越雷区

    穿越雷区(BFS) X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路 ...

  9. 蓝桥杯 2015国赛 穿越雷区

    蓝桥杯 2015国赛 穿越雷区 题目链接 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负 ...

最新文章

  1. 学习 Message(4): 通过 Application.OnMessage 或 TApplicationEvents 响应消息
  2. (2.10)备份与还原--利用T-SQL进行备份还原
  3. java Locale 解析方法
  4. Logistics Regression公式推导
  5. NOSQL 之 cassadra 安装与集群配置
  6. c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
  7. 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
  8. python中双向索引_对索引Include子句的深入分析
  9. explain ref_MySQL 性能分析神器 —— EXPLAIN 用法与解读。
  10. C++是最难的编程语言?为什么这样说?
  11. php-php异步网络通信引擎-服务发现-消息队列 案例
  12. Java实现论坛系统
  13. SAP工厂日历的应用
  14. PAT-1068 万绿丛中一点红
  15. BDrate、BDBR、BDPSNR的计算原理和程序
  16. 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  17. 365 水壶问题(递归、数学-裴蜀定理)
  18. 机器学习实战教程(九):模型泛化
  19. 瓜瓜的时空旅行,第三次模拟赛,dfs序+线段树维护最小值
  20. linux下打开chm格式文件

热门文章

  1. 关于MaxScript 中macroScript 的理解
  2. android 光线传感器 light sensor的使用
  3. 快速上手SpringMVC
  4. 微软投屏器 android,微软 Your Phone 新功能:可同时投屏多款 Android 应用
  5. 月考分析五年级英语html,小学英语五年级试卷分析
  6. STM32进阶:使用STM32驱动ST7735S(内附核心源码)
  7. MySQL数据库同步数据到Oracle
  8. python中赋值语句的例子_python赋值语句规则
  9. 这样操作就不会出现cad转换成jpg不清楚
  10. mysql 可重复读_mysql 可重复读