PROGRAMMING GRIDS 木棍正方形

2021-06-05 23:15:04 字數 1183 閱讀 1832

前面用迭代不知道為什麼出錯,後來改用遞迴

演算法思想:

首先若木棒長度和不是4的整數倍則不可能構成正方形,逐條邊填充,如遇到一條邊不能填充則cut

考慮幾種分支情況:

如果當前邊剩餘空間為0

若剩餘木棒也為0,則已經填充完畢(此時一定恰好填充了4條邊)

否則填充下一條邊

對每條邊設立使用標記,從未使用的第一條邊開始逐個填入,填入時將訪問標記設為true(之後歸還),遞迴填其餘邊

如果剩餘木棒可以填充在剩餘空間中,則直接返回true

如果不能填充,取消當前木棒,若當前木棒已經填滿某條邊,則其餘木棒不用再填充(取掉之後也一樣)

如果下一條木棒和當前木棒相同,則也不用比較

**:

# include # include # include # include using namespace std;

int edgelength = 0;

vectorstickstorage;

vectorusage;

bool pathfinder(int stickremain, int spaceremain, int subscription)

spcr = edgelength;

subscription = 0;

} int size = stickstorage.size();

for ( int i = subscription ; i < size; i++ )

usage[i] = false;

if ( stickstorage[i] == spcr || spcr == edgelength ) //if the current stick fills a line, there's no need to compare any more

while ( stickstorage[i] == stickstorage[i+1] && i < size-1 )

}} return false;

}int main()

sort(stickstorage.begin(),stickstorage.end(),greater());

if ( sum%4 != 0 )

else

if ( possible )

else

}return 0;

}

彎曲的木棍

總時間限制 1000ms 記憶體限制 65536kb 描述 1 n c l 輸入輸入包含多行,每行輸入包括3個非負數 細木棍的初始長度l,溫度的變化n,材料的熱膨脹係數c。輸入資料保證細木棍伸長的長度不會超過原長的一半,最後一行為3個 1,不做處理。輸出對每一行輸入,輸出細木棍的中心在受熱前後移動的...

oj 木棍問題

題目如圖所示 為了避免處理小數誤差,將資料 100處理,二分查詢找到測試長度,然後直到二分區間左右端點相鄰,再測試哪個端點滿足要求,最後換成保留2位小數處理。如下 testb.c testb created by ke tang on 2018 9 19.include include stdlib...

遞迴 木棍問題

問題描述 喬治拿來一組等長的木棒,將它們隨機地裁斷,使得每一節木棒的長度都不超過50 個 長度單位。然後他又想把這些木棒恢復到裁截前的狀態,但忘記了初始時有多少木棒以及木 棒的初始長度。請你設計乙個程式,幫助喬治計算木棒的可能最小長度。每一節木棒的長度 都用大於零的整數表示。輸入資料 由多個案例組成...