深度優先搜尋演算法

2021-10-08 07:20:50 字數 2376 閱讀 2116

題目要求:編寫乙個函式,傳入乙個int型陣列,返回該陣列能否分成兩組,使得兩組中各元素加起來的和相等,並且,所有5的倍數必須在其中乙個組中,所有3的倍數在另乙個組中(不包括5的倍數),能滿足以上條件,返回true;不滿足時返回false。

這個題目 是考察 深度優先搜發演算法的。

在需要讓arr3和arr5兩個陣列中的和相等,就需要將other陣列中的數分配到兩個陣列中,假設分配x到arr5中,分配y到arr3陣列中,那麼需要滿足如下關係式。需要滿足公式:

1:sum5 + x = sum3 + y

2:x + y = othersum

轉換得到:

1:sum5 - sum3 = y - x

2:other = x + y

兩個公式相加:sum5 - sum3 + other = 2*y

進一步可以推出:

y = (sum5 - sum3 + other)/2

sum5,sum3,other這三個數已知,可以求出y的值。也就是說,需要在other陣列中找出一些數,其值為y。可以使用深度優先搜尋演算法進行處理。

因為數都是整數,所以對於y為浮點數的情況可以直接返回false。

#include

#include

using

namespace std;

bool

dfs(

int c,

int n,

bool isvisited,

int target)

for(

int i =

0; i < n; i++

) isvisited[i]

=false;}

}return

false;}

intmain()

;int i =0;

int j =0;

int k =0;

int h =0;

int m;

while

(h < n && cin >> m)

elseif(

abs(m %3)

==0)else

h++;}

int sum3 =

0, sum5 =

0, other =0;

for(

int g =

0; g < i; g++

)for

(int g =

0; g < j; g++

)for

(int g =

0; g < k; g++)if

((sum5 + other -sum3)%2

!=0)int y =

(sum5 + other -sum3)/2

;if(dfs

(c,k,isvisited, y)

==true

)else

}return0;

}

c++ 實現**如下:

#include

#include

using

namespace std;

bool

dfs(

int c,

int n,

bool isvisited,

int target)

for(

int i =

0; i < n; i++

) isvisited[i]

=false;}

}return

false;}

intmain()

;int i =0;

int j =0;

int k =0;

int h =0;

int m;

while

(h < n && cin >> m)

elseif(

abs(m %3)

==0)else

h++;}

int sum3 =

0, sum5 =

0, other =0;

for(

int g =

0; g < i; g++

)for

(int g =

0; g < j; g++

)for

(int g =

0; g < k; g++)if

((sum5 + other -sum3)%2

!=0)int y =

(sum5 + other -sum3)/2

;if(dfs

(c,k,isvisited, y)

==true

)else

}return0;

}

深度優先搜尋演算法

include include define vertexnum 9 struct node typedef struct node graph struct node head vertexnum 定義圖形結構 int visited vertexnum 頂點陣列 深度優先搜尋 void dfs ...

深度優先搜尋演算法

今天我們來複習一下萬能的搜尋演算法之深度優先搜尋演算法。深度優先搜尋演算法顧名思義就是按照樹的延伸不停的往下搜尋,直到樹的盡頭之後再一步一步的回溯回來。好吧,我們直接問你乙個問題,給你乙個數n,讓你輸出從1到這個樹的全排列,你會怎麼寫,會不會想到去用若干個for迴圈?好吧,你肯定錯了,其實他考的就是...

深度優先搜尋演算法

1.深度優先搜尋演算法的概念 深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個 節點只能訪問一次。如下例 該圖為乙個無向圖,假設我們從a開始進行深度優先搜尋,第二點可以是b c d中任意乙個,...