日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

非递归解决组合问题

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非递归解决组合问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//非遞歸搜索回溯框架
dep:=1;//搜索起點,深度為1
repeat
?? ?while g[dep]<=搜索方案數 do//能進則進
?? ?begin
?? ??? ?inc(g[dep]);//取前進方案
?? ??? ?if 不符條件 then continue;
?? ??? ?if dep=步數或達到終點條件 then print
?? ??? ?else inc(dep);?? ??? ?
?? ?end;
???
?? ?g[dep]:=0;

  dec(dep);//回溯,恢復狀態
until dep=0;//回溯到起點之前時結束搜索

?

begin
?? ?readln(n,r);
?? ?dep:=1;//搜索起點,深度為1
?? ?repeat?? ??? ?
?? ??? ?while g[dep]<=n do//能進則進
?? ??? ?begin
?? ??? ??? ?b[g[dep]]:=0;//回溯
?? ??? ??? ?repeat
?? ??? ??? ??? ?inc(g[dep]);?? ?
?? ??? ??? ?until b[g[dep]]=0;//取前進方案
?? ??? ??? ?if (g[dep]>n)? then break;//不符條件
?? ??? ??? ?b[g[dep]]:=1;//記錄之間結果
?? ??? ??? ?if dep=r then print //終點
?? ??? ??? ?else inc(dep);?? ??? ?//進
?? ??? ?end;?? ??? ??? ?
?? ??? ?b[g[dep]]:=0;//回溯
?? ??? ?g[dep]:=0;
?? ??? ?dec(dep);?? ?
?? ?until dep=0;//回溯到起點之前時結束搜索
?? ?writeln(s);
end.

?

var n,i,t,m:integer;
??? g:array[0..100]of integer;
??? b:set of 0..100;
begin
?readln(n,m);
?t:=1;
?b:=[];
?fillchar(g,sizeof(g),0);
?repeat
? while t<=n do
? begin
?? b:=b-[g[t]];
?? repeat
??? inc(g[t]);
?? until (not(g[t] in b)) and ((g[t]>g[t-1]));//過濾條件
?? if (g[t]>n) then break;
?? b:=b+[g[t]];
?? if t=m then
?? begin
??? for i:=1 to m do write(g[i],' ');
??? writeln;
?? end
?? else inc(t);
?? end;
?? b:=b-[g[t]];
?? g[t]:=0;
?? dec(t);
? until t=0;
end.

轉載于:https://www.cnblogs.com/nbalive2001/p/3333191.html

總結

以上是生活随笔為你收集整理的非递归解决组合问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。