PKU_ACM_1164_The Castle

本文介绍了一种基于迷宫搜索的简单题目实现方法,通过Java编程语言详细展示了如何构建迷宫矩阵并进行搜索处理,包括读取输入数据、定义房间状态及遍历策略等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://acm.pku.edu.cn/JudgeOnline/problem?id=1164  原题

 

类似于迷宫搜索的简单题

 

  1. import java.io.*;
  2. import java.util.*;
  3. public class Main
  4. {
  5.     static Room[][] matrix;
  6.     static int row;
  7.     static int col;
  8.     public static void main(String[] args) throws Exception
  9.     {
  10.         readFile();
  11.         for(int i=0; i<row; i++)
  12.         {
  13.             for(int j=0; j<col; j++)
  14.             {
  15.                 if(!matrix[i][j].bFlag)
  16.                 {
  17.                     process(i,j);
  18.                     sumCount++;
  19.                     if(maxCount>INF)
  20.                     {
  21.                         INF = maxCount;
  22.                     }
  23.                     maxCount=0;
  24.                 }
  25.             }
  26.         }
  27.         System.out.print(sumCount);
  28.         System.out.print("/n"+INF);
  29.     }
  30.     public static void readFile() throws Exception
  31.     {
  32.         BufferedReader br = new BufferedReader(
  33.             new InputStreamReader(System.in));
  34.         StringTokenizer st = null;
  35.         row = Integer.valueOf(br.readLine());
  36.         col = Integer.valueOf(br.readLine());
  37.         matrix = new Room[row][col];
  38.         int count = 0;
  39.         while(count<row)
  40.         {
  41.             st = new StringTokenizer(br.readLine()," ");
  42.             int j = 0;
  43.             Room room = null;
  44.             while(st.hasMoreTokens())
  45.             {
  46.                 room = new Room(Integer.valueOf(st.nextToken()));
  47.                 matrix[count][j] = room;
  48.                 j++;
  49.             }
  50.             count++;
  51.         }
  52.     }
  53.     static void displayRoom()
  54.     {
  55.         for(int i=0; i<row; i++)
  56.         {
  57.             for(int j=0; j<col; j++)
  58.                 System.out.println(matrix[i][j]);
  59.             System.out.println();
  60.         }
  61.     }
  62.     static int sumCount = 0;
  63.     static int maxCount = 0;
  64.     static int INF = 0;
  65.     static void process(int i,int j)
  66.     {
  67.         if(i<0 || j<0 || i>=row || j>=col)
  68.             return;
  69.         if(matrix[i][j].bFlag)
  70.             return;
  71.         maxCount++;
  72.         matrix[i][j].bFlag = true;
  73.         if(matrix[i][j].states[0][1]==2)
  74.         {
  75.             process(i-1,j);
  76.         }
  77.         if(matrix[i][j].states[1][2]==2)
  78.         {
  79.             process(i,j+1);
  80.         }
  81.         if(matrix[i][j].states[2][1]==2)
  82.         {
  83.             process(i+1,j);
  84.         }
  85.         if(matrix[i][j].states[1][0]==2)
  86.         {
  87.             process(i,j-1);
  88.         }
  89.         
  90.         
  91.     }
  92.     
  93.     static class Room
  94.     {
  95.         int[][] states = new int[3][3];
  96.         boolean bFlag = false;
  97.         Room(int flag)
  98.         {
  99.             states[1][1] = 1;
  100.             switch(flag)
  101.             {
  102.             case 0:
  103.                 states[0][1] = 2;
  104.                 states[1][2] = 2;
  105.                 states[1][0] = 2;
  106.                 states[2][1] = 2;
  107.                 break;
  108.             case 1:
  109.                 states[0][1] = 2;
  110.                 states[1][2] = 2;
  111.                 states[2][1] = 2;
  112.                 break;
  113.             case 2:
  114.                 states[1][0] = 2;
  115.                 states[1][2] = 2;
  116.                 states[2][1] = 2;
  117.                 break;
  118.             case 3:
  119.                 states[1][2] = 2;
  120.                 states[2][1] = 2;
  121.                 break;
  122.             case 4:
  123.                 states[0][1] = 2;
  124.                 states[1][0] = 2;
  125.                 states[2][1] = 2;
  126.                 break;
  127.             case 5:
  128.                 states[0][1] = 2;
  129.                 states[2][1] = 2;
  130.                 break;
  131.             case 6:
  132.                 states[1][0] = 2;
  133.                 states[2][1] = 2;
  134.                 break;
  135.             case 7:
  136.                 states[2][1] = 2;
  137.                 break;
  138.             case 8:
  139.                 states[0][1] = 2;
  140.                 states[1][0] = 2;
  141.                 states[1][2] = 2;
  142.                 break;
  143.             case 9:
  144.                 states[0][1] = 2;
  145.                 states[1][2] = 2;
  146.                 break;
  147.             case 10:
  148.                 states[1][0] = 2;
  149.                 states[1][2] = 2;
  150.                 break;
  151.             case 11:
  152.                 states[1][2] = 2;
  153.                 break;
  154.             case 12:
  155.                 states[0][1] = 2;
  156.                 states[1][0] = 2;
  157.                 break;
  158.             case 13:
  159.                 states[0][1] = 2;
  160.                 break;
  161.             case 14:
  162.                 states[1][0] = 2;
  163.                 break;
  164.             case 15:
  165.                 break;
  166.             }
  167.         }
  168.         public String toString()
  169.         {
  170.             for(int i=0; i<3; i++)
  171.             {
  172.                 for(int j=0; j<3; j++)
  173.                     System.out.print(states[i][j] + " ");
  174.                 System.out.println();
  175.             }
  176.             return "";
  177.         }
  178.     }
  179. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值