返回列表 發帖

202406新手3-吸血鬼Vampire_找不到judge


吸血鬼 (Vampire)
問題敘述
數百年前,獵人贏得對抗吸血鬼的戰爭,將所有吸血鬼都封印起來。然而,基於某種未知的力量,有幾隻吸血鬼突破了封印。獵人首領在接收到消息後,也立刻部屬了獵人,準備再度消滅它們。
王國領土是由 HW(H 列 W 行)的正方形土地所構成,每塊土地有一個村莊。每一天的午夜到太陽升起前,吸血鬼會向四個斜角的村莊感染,擴大吸血鬼的勢力;要是吸血鬼發現目標村莊已經是獵人的勢力,就不會再去感染那個村莊。太陽升起後,獵人的勢力會向東南西北四個方位的村莊擴張,並消滅勢力範圍內的吸血鬼。(即每一天是由吸血鬼先動作,再換獵人動作。)
下圖中紅色代表吸血鬼勢力,藍色代表獵人勢力,給定第 0 天的起始勢力狀態,第 1 天與第 2 天的勢力分布狀態如圖所示。

請你撰寫一個程式,給定第 0 天的勢力分布狀態,求得第 K 天後的勢力分布。


附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
May

  1. #include <bits/stdc++.h>

  2. using namespace std;

  3. int main()
  4. {
  5.     int H, W, K;
  6.     cin >> H >> W >> K;
  7.     int map[H + 2][W + 2], newMap[H + 2][W + 2];
  8.     for (int i = 0; i < H + 2; i++)
  9.     {
  10.         for (int j = 0; j < W + 2; j++)
  11.         {
  12.             map[i][j] = 2;
  13.             newMap[i][j] = 2;
  14.         }
  15.     } //初始化所有的陣列

  16.     for (int i = 1; i <= H; i++)
  17.     {
  18.         for (int j = 1; j <= W; j++)
  19.         {
  20.             cin >> map[i][j];
  21.         }
  22.     } // 輸入初始狀態

  23.     for (int i = 0; i < K; i++)
  24.     {
  25.         for (int h = 1; h <= H; h++)
  26.         {
  27.             for (int w = 1; w <= W; w++)
  28.             {
  29.                 if (map[h - 1][w] == 1 || map[h + 1][w] == 1 || map[h][w - 1] == 1 || map[h][w + 1] == 1)
  30.                 {
  31.                     newMap[h][w] = 1;
  32.                 } // 若四周有獵人,必變成獵人
  33.                 else if (map[h][w] == 0 &&
  34.                          (map[h - 1][w - 1] == -1 || map[h - 1][w + 1] == -1 || map[h + 1][w - 1] == -1 || map[h + 1][w + 1] == -1))
  35.                 {
  36.                     newMap[h][w] = -1;
  37.                 } //若自身是一般人,且四角為吸血鬼,必變成吸血鬼
  38.                 else
  39.                 {
  40.                     newMap[h][w] = map[h][w];
  41.                 } // 其餘情況照舊
  42.             }
  43.         }

  44.         for (int h = 1; h <= H; h++)
  45.         {
  46.             for (int w = 1; w <= W; w++)
  47.             {
  48.                 map[h][w] = newMap[h][w];
  49.             }
  50.         } // 每隔一天,就更新地圖
  51.     }

  52.     for (int i = 1; i <= H; i++)
  53.     {
  54.         for (int j = 1; j <= W; j++)
  55.         {
  56.             cout << map[i][j] << " ";
  57.         }
  58.         cout << endl;
  59.     } // 輸出經過K天的狀況
  60. }
  61. /*
  62. 5 5 2
  63. 0 0 0 0 0
  64. 0 0 -1 0 0
  65. 0 0 0 0 0
  66. 0 0 0 1 0
  67. 0 0 0 0 0



  68. */
複製代碼
May

TOP

返回列表