再解炸彈人(深度優先和廣度優先)

2021-09-10 15:43:28 字數 2162 閱讀 4453

現在炸彈不是想放在那裡就能放在那裡的了,必須由小人能夠走到的地方才能放置炸彈。比如下面這個例子小人預設站在(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.深度優先搜尋方法有廣義和狹義兩種理解。廣義的...