#include
using namespace std;
int n; // 儲存讀入的整數n
bool opr[10]; // 可以用乙個bool陣列儲存所有n-1個符號,我們用true表示加號"+",用false表示減號"-"。
bool found = false; // 表示是否找到一組解,如果沒找到的話需要在最後輸出"none"
// dfs函式,儲存兩個狀態:deep表示遞迴深度,就是列舉到第幾個數字左邊的符號;sum表示之前部分表示式的值。
// 如果列舉完成後sum的值剛好為0,則輸出這組方案。我們需要在搜尋的過程中用opr陣列儲存狀態。
void dfs(int deep, int sum)
else if(opr[deep]==false) }
printf("\n"); }
return ; }
// 請在下面的語句中填出正確的邏輯。
opr[deep] = true;
dfs(deep+1,sum+deep+1);
opr[deep] = false;
dfs(deep+1,sum-deep-1); }
// main函式請自己完成哦,加油~
int main()
return 0; }
//此題是一道典型的深度搜尋題型,狀態之間的不斷轉移,dfs(1,1)是第乙個狀態,如果+則第二個狀態是dfs(2,3),以此類推,故迴圈體的 sum = 前乙個sum + 或 - 當前的deep(上乙個deep+1)
蒜頭學算術,計蒜客演算法學習記錄
蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著1,2,3 n這n個數,中間用空白分隔。老師讓他在空白處填上加號或者減號。他讓蒜頭君求出一共有多少種加運算子的方法使得整個表示式的值為0,並輸出所有的方案。比如n 7時,1 2 3 4 5 6 7排成一排,一種插...
(深度優先搜尋第二課) 蒜頭學算數 DFS
蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著1,2,3.n這n個數,中間用空白分隔。老師讓他在空白處填上加號或者減號。他讓蒜頭君求出一共有多少種加運算子的方法使得整個表示式的值為0,並輸出所有的方案。比如n 7時,1 2 3 4 5 6 7排成一排,一種插...
演算法學習 DFS與BFS
一。深度優先搜尋 深度優先搜尋 是一種列舉所有完整路徑以遍歷所有情況的搜尋方法。類似樹的先根遍歷。簡單來說,就是一直往深處走,直到找到解或走不下去了為止。可以使用棧來實現,用棧儲存未被檢測的結點,結點按照深度優先的次序被訪問並依次被壓入棧中,並以相反的次序出站進行新的檢測。也可以使用遞迴實現,相對 ...