標題:
202406新手3-吸血鬼Vampire_找不到judge
[打印本頁]
作者:
may
時間:
2024-10-20 16:27
標題:
202406新手3-吸血鬼Vampire_找不到judge
[attach]20009[/attach]
吸血鬼 (Vampire)
問題敘述
數百年前,獵人贏得對抗吸血鬼的戰爭,將所有吸血鬼都封印起來。然而,基於某種未知的力量,有幾隻吸血鬼突破了封印。獵人首領在接收到消息後,也立刻部屬了獵人,準備再度消滅它們。
王國領土是由 HW(H 列 W 行)的正方形土地所構成,每塊土地有一個村莊。每一天的午夜到太陽升起前,吸血鬼會向四個斜角的村莊感染,擴大吸血鬼的勢力;要是吸血鬼發現目標村莊已經是獵人的勢力,就不會再去感染那個村莊。太陽升起後,獵人的勢力會向東南西北四個方位的村莊擴張,並消滅勢力範圍內的吸血鬼。(即每一天是由吸血鬼先動作,再換獵人動作。)
下圖中紅色代表吸血鬼勢力,藍色代表獵人勢力,給定第 0 天的起始勢力狀態,第 1 天與第 2 天的勢力分布狀態如圖所示。
[attach]20092[/attach]
請你撰寫一個程式,給定第 0 天的勢力分布狀態,求得第 K 天後的勢力分布。
[attach]20093[/attach]
[attach]20094[/attach]
[attach]20095[/attach]
作者:
may
時間:
2024-10-30 18:00
#include <bits/stdc++.h>
using namespace std;
int main()
{
int H, W, K;
cin >> H >> W >> K;
int map[H + 2][W + 2], newMap[H + 2][W + 2];
for (int i = 0; i < H + 2; i++)
{
for (int j = 0; j < W + 2; j++)
{
map[i][j] = 2;
newMap[i][j] = 2;
}
} //初始化所有的陣列
for (int i = 1; i <= H; i++)
{
for (int j = 1; j <= W; j++)
{
cin >> map[i][j];
}
} // 輸入初始狀態
for (int i = 0; i < K; i++)
{
for (int h = 1; h <= H; h++)
{
for (int w = 1; w <= W; w++)
{
if (map[h - 1][w] == 1 || map[h + 1][w] == 1 || map[h][w - 1] == 1 || map[h][w + 1] == 1)
{
newMap[h][w] = 1;
} // 若四周有獵人,必變成獵人
else if (map[h][w] == 0 &&
(map[h - 1][w - 1] == -1 || map[h - 1][w + 1] == -1 || map[h + 1][w - 1] == -1 || map[h + 1][w + 1] == -1))
{
newMap[h][w] = -1;
} //若自身是一般人,且四角為吸血鬼,必變成吸血鬼
else
{
newMap[h][w] = map[h][w];
} // 其餘情況照舊
}
}
for (int h = 1; h <= H; h++)
{
for (int w = 1; w <= W; w++)
{
map[h][w] = newMap[h][w];
}
} // 每隔一天,就更新地圖
}
for (int i = 1; i <= H; i++)
{
for (int j = 1; j <= W; j++)
{
cout << map[i][j] << " ";
}
cout << endl;
} // 輸出經過K天的狀況
}
/*
5 5 2
0 0 0 0 0
0 0 -1 0 0
0 0 0 0 0
0 0 0 1 0
0 0 0 0 0
*/
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2