題目:
蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出一個等邊三角形.并且每根木棍都要用到。例如,林頭君手上有長度為 1 , 2 ,3 ,3 的 4 根木棍.他可以讓長度為 1 , 2 的木棍組成一條邊.另外 2 跟分別組成 2 條邊,拼成一個邊長為 3 的等邊三角形。蒜頭君希望你提前告訴他能不能拼出來,免得白費功夫。
輸入格式:首先輸入一個整數n。( 3 <=n <=20 ) ,表示木數量,接下來輸入 n 根木棍的長度p( 1 <=p<= 10000 )。
輸出格式:如果蒜頭君能拼出等邊三角形,輸出” yes " ,否則輸出“no”。
代碼:
//抽象深度優先搜索
#include<bits/stdc++.h>
using namespace std;
int p[25];
bool f;
int n; //輸入數量
int sum = 0;
//x表示完成了多少條邊
//s表示目前的和是多少(用來與sum/3比較)
//st表示下一步的索引
void dfs(int x, int s, int st){
if(f){
return;
}
if(x == 3){
f = true;
return;
}
if(s == sum / 3){
dfs(x + 1, 0, 0);
return;
}
for(int i = st; i < n; i++){
//cout<<x<<" "<<s<<" "<<st<<endl;
dfs(x, s + p[i], i + 1);
}
}
int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &p[i]);
sum += p[i];
}
if(sum % 3 != 0){
//說明不可以拆分成等邊
printf("no\n");
}else {
dfs(0, 0, 0);
if(f){
printf("yes\n");
}else {
printf("no\n");
}
}
return 0;
}
問題:請問大佬們,
if(s == sum / 3){
dfs(x + 1, 0, 0);
return;
}這里如果把下一步的索引設為0,那豈不是每一條邊的拼湊都是由那兩個木棍完成的?
有大佬能講解一下嘛,或者整個計算的步驟
uj5u.com熱心網友回復:
這個演算法是有問題的,你哪來的代碼?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114581.html
標籤:C++ 語言
上一篇:編程中的人生哲理
