這題要注意已經爆過的炸彈不要再引爆了,不然會無限循環
#include <stdio.h>
int bomb[1001]; // 全域陣列,儲存所有炸彈狀態
// 遞迴函式:模擬從第 i 個炸彈開始的連鎖爆炸
void Detonate(int bomb[],int i,int N);
int main()
{
int N;
int first_detonate; // 初始引爆位置
int i;
scanf("%d",&N); // 輸入炸彈數量
// 輸入每個炸彈的類型
for(i=0; i<N; i++) {
scanf("%d",&bomb[i]);
}
scanf("%d",&first_detonate); // 輸入起始引爆位置
// 從指定位置開始爆炸
Detonate(bomb,first_detonate,N);
// 輸出最終結果
for(i=0; i<N; i++) {
printf("%d ",bomb[i]);
}
return 0;
}
// 遞迴處理爆炸
void Detonate(int bomb[],int i, int N) {
int temp;
// 如果該炸彈還沒被引爆(不為 0)
if(bomb[i]!=0) {
temp=bomb[i]; // 先記住原本的爆炸類型
bomb[i]=0; // 標記為已爆炸(避免重複觸發)
// 類型 2:影響左右相鄰炸彈
if(temp==2) {
if(i-1>=0) {
Detonate(bomb,i-1,N); // 引爆左邊
}
if(i+1<=N-1) {
Detonate(bomb,i+1,N); // 引爆右邊
}
}
// 類型 >=3:影響 ±temp、±2*temp
if(temp>=3) {
if(i-temp>=0) {
Detonate(bomb,i-temp,N);
}
if(i-2*temp>=0) {
Detonate(bomb,i-2*temp,N);
}
if(i+temp<=N-1) {
Detonate(bomb,i+temp,N);
}
if(i+2*temp<=N-1) {
Detonate(bomb,i+2*temp,N);
}
}
}
}