現在炸彈不是想放在那裡就能放在那裡的了,必須由小人能夠走到的地方才能放置炸彈。比如下面這個例子小人預設站在(3,3)這個位置。請問放在何處最多可以消滅多個敵人。
解釋:上面解炸彈人的方法有可能小人並不能走到那裡去,也就不能放置炸彈。我們可以通過深度優先和廣度優先來進行搜尋,確保該點小人可以到達,再在可到達的點周圍確定可以消滅敵人的數目。
dfs:先更新最大值,再迴圈
#include
int book[51][51] = ;
char a[51][51];//記錄地圖
int max,n,m,mx,my;
int getsum(int i,int j)
x--;
}x = i;
y = j;
while(a[x][y]!='#')//不為牆 向下檢查
x++;
}
x = i;
y = j;
while(a[x][y]!='#')//不為牆 向左檢查
y--;
}x = i;
y = j;
while(a[x][y]!='#')//不為牆 向右檢查
y++;
}return sum;
} void dfs(int x,int y)
,,,};//搜尋的方向,右,下,左,上
sum = getsum(x,y);//以該點為中心,向四個方向尋找可以消滅敵人的總數
if(sum>max)//更新最大值並且記錄橫縱座標
for(k = 0;k <= 3;k++)
if(a[tx][ty]=='.'&&book[tx][ty]==0)//判斷是否為平地或曾經走過
}return;
}int main()
book[x][y]=1;
max = getsum(x,y);
mx = x;
my = y;
dfs(x,y);
printf("%d",max);
return 0;
}bfs:先迴圈,再更新最大值
#include
struct node
;char a[51][51];//記錄地圖
int getsum(int i,int j)
x--;
}x = i;
y = j;
while(a[x][y]!='#')//不為牆 向下檢查
x++;
}
x = i;
y = j;
while(a[x][y]!='#')//不為牆 向左檢查
y--;
}x = i;
y = j;
while(a[x][y]!='#')//不為牆 向右檢查
y++;
}return sum;
} int main()
;//定義乙個標記陣列並全部初始化為0
int next[4][2]=,,,};//搜尋的方向,右,下,左,上
int i,j,sum,k,mx,my,x,y,n,m,head,tail,max = 0,tx,ty;
head = 1;
tail = 1;
scanf("%d%d%d%d",&n,&m,&x,&y);//讀入行和列,起始座標
for(i = 0;i < n;i++)//讀入地圖
que[tail].x = x;//初始化
que[tail].y = y;
book[x][y] = 1;
tail++;
max = getsum(x,y);//記錄初始點的資訊
mx = x;
my = y;
while(headn-1||ty<0||ty>m-1)//邊界
if(a[tx][ty]=='.'&&book[tx][ty]==0)//判斷是否為平地或曾經走過 }}
head++;
} // printf("將炸彈放置在(%d,%d)處,最大可消滅敵人數為:%d\n",mx,my,max);
printf("%d",max);
return 0;
}
BFS深度優先搜尋 炸彈人
題面 乙個人在乙個座標放炸彈,請問可以可以殺死的敵人數目最大是,並且輸出該點的座標 g代表敵人 代表該位置可以走 代表該位置存在障礙物 並且防止炸彈的蔓13 13 3 3 gg.ggg ggg.g g g g g g g g gg.ggg.gg g g g g g g g g ggg.gg g g ...
深度優先和廣度優先
在爬蟲系統中,待抓取url佇列是很重要的一部分,待抓取url佇列中的url以什麼樣的順序排隊列也是乙個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面是常用的兩種策略 深度優先 廣度優先 注 scrapy預設採用的是深度優先演算法 這裡是深...
深度優先和廣度優先區別
一 深度優先搜尋的特點是 1.深度優先搜尋法有遞迴以及非遞迴兩種設計方法。一般的,當搜尋深度較小 問題遞迴方式比較明顯時,用遞迴方法設計好,它可以使得程式結構更簡捷易懂。當資料量較大時,由於系統堆疊容量的限制,遞迴容易產生溢位,用非遞迴方法設計比較好。2.深度優先搜尋方法有廣義和狹義兩種理解。廣義的...