各位版友好:
以下附上我的程式碼:
#include<iostream>
using namespace std;
int main() {
int n, m, k;
cin>>n>>m>>k;
int chess[n][m];
for(int p = 0; p < n; p++)
for(int q = 0; q < m; q++)
chess[p][q] = 0; //0表示沒炸彈,1表示有炸彈,2表示同時有魔王跟炸彈
int walk[k][4]; //用來記錄每個魔王的x,y坐標及x移動,y移動
bool exit[k] = {0}; //有K個魔王,預設魔王如果還在為0, 魔王如果消失為1
for(int i = 0; i < k; i++)
cin>>walk[i][0]>>walk[i][1]>>walk[i][2]>>walk[i][3];
int devil = k;
while(devil > 0) {
for(int i = 0; i < k; i++)
if(exit[i] == 0)
chess[walk[i][0]][walk[i][1]] = 1; //魔王在的格子設為1,表示有炸彈
for(int i = 0; i < k; i++) {
walk[i][0]+=walk[i][2];
walk[i][1]+=walk[i][3];
} //魔王移動
for(int i = 0; i < k; i++) {
if(exit[i] == 0 && (walk[i][0] >= n || walk[i][1] >= m)) {
devil--;
exit[i] = 1;
} //魔王出格消失
if(exit[i] == 0) {
if(chess[walk[i][0]][walk[i][1]] == 1 || chess[walk[i][0]][walk[i][1]] == 2 ) {
devil--;
exit[i] = 1;
chess[walk[i][0]][walk[i][1]] = 2;
} //魔王踩到炸彈,該格上同時有炸彈和魔王(可能不只一個魔王或炸彈),此時設為2
}
}
for(int p = 0; p < n; p++)
for(int q = 0; q < m; q++)
if(chess[p][q] == 2)
chess[p][q] = 0; //原本為2的格子,因魔王數在前面已減去,且炸彈也跟著消失,所以將之變回0
}
int ans = 0;
for(int p = 0; p < n; p++)
for(int q = 0; q < m; q++)
if(chess[p][q] == 1)
ans++;
cout<<ans;
return 0;
}