日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C++ > 正文

C++回溯法實(shí)例分析

2020-05-23 14:21:41
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C++回溯法,實(shí)例講述了回溯法的原理與實(shí)現(xiàn)方法,最后給出了回溯法解決八皇后的實(shí)例,需要的朋友可以參考下
本文實(shí)例講述了C++的回溯法,分享給大家供大家參考之用。具體方法分析如下:
一般來說,回溯法是一種枚舉狀態(tài)空間中所有可能狀態(tài)的系統(tǒng)方法,它是一個(gè)一般性的算法框架。
解向量a=(a1, a2, ..., an),其中每個(gè)元素ai取自一個(gè)有限序列集Si,這樣的解向量可以表示一個(gè)排列,其中ai是排列中的第i個(gè)元素,也可以表示子集S,其中ai為真當(dāng)且僅當(dāng)全集中的第i個(gè)元素在S中;甚至可以表示游戲的行動(dòng)序列或者圖中的路徑。
在回溯法的每一步,我們從一個(gè)給定的部分解a={a1, a2, ..., ak}開始,嘗試在最后添加元素來擴(kuò)展這個(gè)部分解,擴(kuò)展之后,我們必須測試它是否為一個(gè)完整解,如果是的話,就輸出這個(gè)解;如果不完整,我們必須檢查這個(gè)部分解是否仍有可能擴(kuò)展成完整解,如果有可能,遞歸下去;如果沒可能,從a中刪除新加入的最后一個(gè)元素,然后嘗試該位置上的其他可能性。
用一個(gè)全局變量來控制回溯是否完成,這個(gè)變量設(shè)為finished,那么回溯框架如下,可謂是回溯大法之精髓與神器

#include <iostream>

using namespace std;

char str[] = "abc";
const int size = 3;

int constructCandidate(bool *flag, int size = 2)
{
flag[0] = true;
flag[1] = false;

return 2;
}

void printCombine(const char *str, bool *flag, int pos, int size)
{
if (str == NULL || flag == NULL || size <= 0)
return;
 
if (pos == size)
{
cout << "{ ";
for (int i = 0; i < size; i++)
{
  if (flag[i] == true)
  cout << str[i] << " ";
}
cout << "}" << endl;
}
else
{
bool candidates[2];
int number = constructCandidate(candidates);
for (int j = 0; j < number; j++)
{
  flag[pos] = candidates[j];
  printCombine(str, flag, pos + 1, size);
}
}
}

void main()
{
bool *flag = new bool[size];
if (flag == NULL)
return;
printCombine(str, flag, 0, size);
delete []flag;
}
采用回溯法框架來計(jì)算字典序排列:

#include <iostream>

using namespace std;

char str[] = "abc";
const int size = 3;

void constructCandidate(char *input, int inputSize, int index, char *states, char *candidates, int *ncandidates)
{
if (input == NULL || inputSize <= 0 || index < 0 || candidates == NULL || ncandidates == NULL)
return;
 
bool buff[256];
for (int i = 0; i < 256; i++)
buff[i] = false;
int count = 0;
for (int i = 0; i < index; i++)
{
buff[states[i]] = true;
}
for (int i = 0; i < inputSize; i++)
{
if (buff[input[i]] == false)
  candidates[count++] = input[i];
}
*ncandidates = count;
return;
}

bool isSolution(int index, int inputSize)
{
if (index == inputSize)
return true;
else
return false;
}

void processSolution(char *input, int inputSize)
{
if (input == NULL || inputSize <= 0)
return;

for (int i = 0; i < inputSize; i++)
cout << input[i];
cout << endl;
}

void backTack(char *input, int inputSize, int index, char *states, int stateSize)
{
if (input == NULL || inputSize <= 0 || index < 0 || states == NULL || stateSize <= 0)
return;
 
char candidates[100];
int ncandidates;
if (isSolution(index, inputSize) == true)
{
processSolution(states, inputSize);
return;
}
else
{
constructCandidate(input, inputSize, index, states, candidates, &ncandidates);
for (int i = 0; i < ncandidates; i++)
{
  states[index] = candidates[i];
  backTack(input, inputSize, index + 1, states, stateSize);
}
}
}

void main()
{
char *candidates = new char[size];
if (candidates == NULL)
return;
backTack(str, size, 0, candidates, size);
delete []candidates;
}
對比上述兩種情形,可以發(fā)現(xiàn)唯一的區(qū)別在于全排列對當(dāng)前解向量沒有要求,而字典序?qū)Ξ?dāng)前解向量是有要求的,需要知道當(dāng)前解的狀態(tài)!
八皇后回溯法求解:

#include <iostream>

using namespace std;

int position[8];

void constructCandidate(int *input, int inputSize, int index, int *states, int *candidates, int *ncandidates)
{
if (input == NULL || inputSize <= 0 || index < 0 || candidates == NULL || ncandidates == NULL)
return;
 
*ncandidates = 0;
bool flag;
for (int i = 0; i < inputSize; i++)
{
flag = true;
for (int j = 0; j < index; j++)
{
  if (abs(index - j) == abs(i - states[j]))
  flag = false;
  if (i == states[j])
  flag = false;
}

if (flag == true)
{
  candidates[*ncandidates] = i;
  *ncandidates = *ncandidates + 1;
}
}
/*
cout << "ncandidates = " << *ncandidates << endl;
system("pause");*/

return;
}

bool isSolution(int index, int inputSize)
{
if (index == inputSize)
return true;
else
return false;
}

void processSolution(int &count)
{
count++;
}

void backTack(int *input, int inputSize, int index, int *states, int stateSize, int &count)
{
if (input == NULL || inputSize <= 0 || index < 0 || states == NULL || stateSize <= 0)
return;
 
int candidates[8];
int ncandidates;
if (isSolution(index, inputSize) == true)
{
processSolution(count);
}
else
{
constructCandidate(input, inputSize, index, states, candidates, &ncandidates);
for (int i = 0; i < ncandidates; i++)
{
  states[index] = candidates[i];
  backTack(input, inputSize, index + 1, states, stateSize, count);
}
}
}

void main()
{
//初始化棋局
for (int i = 0; i < 8; i++)
position[i] = i;

int states[8];
int count = 0;
backTack(position, 8, 0, states, 8, count);
cout << "count = " << count << endl;
}
希望本文所述對大家C++程序算法設(shè)計(jì)的學(xué)習(xí)有所幫助。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲热线99精品视频| 亚洲第一视频网站| 久久久99久久| 日韩在线不卡| 欧美日韩中文字幕在线观看| 欧美日韩国产不卡| 欧美日韩国产综合久久| 日韩精品视频在线播放| 在线资源av| www.三级.com| 欧美日韩视频免费播放| 亚洲成av人片| 日韩中文字幕网| 一区二区视频国产| 日韩在线高清视频| 日韩视频在线免费看| 日韩中文字幕视频在线| 日韩中文字幕第一页| 亚洲v中文字幕| 色综合久久88色综合天天免费| 免费一级欧美在线观看视频| 中文精品视频| 国产色综合网| 日韩精品视频在线观看免费| 久久久99免费| 亚洲免费在线视频一区 二区| 国产福利一区二区| 日韩在线观看a| 午夜一区二区视频| 国产欧美日韩精品高清二区综合区 | 欧美乱大交xxxxx另类| 伊人网站在线| 中文网丁香综合网| 日本精品专区| 国产欧美综合视频| 亚洲日本欧美日韩高观看| 精品久久久精品| 国产小视频在线| 最新日韩中文字幕| 在线中文免费视频| 欧美久久久精品| 日韩精品视频免费在线观看| 精品人妻一区二区免费视频| 欧美亚洲国产日韩| 国产精品一区二三区| 99精品999| 亚洲综合中文字幕在线| 亚洲福利在线视频| 一级日本免费的| 韩国一区二区av| 91精品国产全国免费观看 | 欧美日韩中文国产| 国产欧美日韩久久| 久久精品在线免费观看| 欧美日韩在线播放视频| 日韩欧美中文| 欧美特黄一区| 日本免费看黄| 深夜日韩欧美| 日本国产一区| 日韩欧美一二三区| 国产一区久久久| 国产亚洲欧美中文| 亚洲大片精品永久免费| 高清不卡一区二区| 国产99亚洲| 精品日韩99亚洲| 日韩精品视频在线| 国产传媒久久久| 午夜少妇久久久久久久久| 久久韩国免费视频| 亚洲第一香蕉网| 久久精品电影| 国产欧美日韩久久| 欧美日韩不卡在线视频| 国产天堂素人系列在线视频| 在线一区免费| 日韩精品―中文字幕| 国产区日韩欧美| 天堂在线视频中文网| 国产激情在线播放| 精品视频999| 日韩视频在线免费播放| 精品不卡一区二区| 深夜福利亚洲| 91麻豆精品在线| 日韩久久精品网| 国产高清精品在线观看| www中文字幕| 一本一道久久a久久精品综合蜜臀| 精人妻一区二区三区| 蜜臀91精品国产高清在线观看| 国产不卡精品在线| 中文字幕 欧美 日韩| 欧美日韩在线播放三区四区| 欧美中日韩在线| 亚洲男人在线| 日韩欧美在线综合| 欧美久久久精品| 欧美日韩亚洲国产综合| 精品国内自产拍在线视频| 91精品国产91久久久久青草| 中文字幕在线观看播放| 欧美中文字幕在线观看视频| 一区免费在线| 天天综合天天| 国产中文在线播放| 亚洲国产www| 国产欧美日韩精品在线观看| 欧美日韩国产123区| 国产日韩免费| 国产字幕在线看| 午夜一区二区三区免费| 欧美在线视频一区二区| 欧美日韩国产专区| 99在线国产| 日韩一级在线免费观看| 91精品国产91综合久久蜜臀| 一区二区在线观看不卡| 欧美日韩高清一区二区不卡| 一区二区三区精品久久久| 中文天堂在线一区| 欧美日韩激情一区| 国产欧美日韩中文字幕| 99视频在线看| 国产视频97| 国产激情在线视频| 亚洲视频日韩| 精品国产1区2区3区| 精品一二三四区| 欧美久久久精品| xxxcom在线观看| 日韩精品在线观看视频| 亚洲成av人片在线| 国产欧美第一页| 国产日产一区二区三区| 91精品观看| 欧美日韩国产在线看| 欧美日韩国产不卡| 中文字幕精品视频在线| 99热最新网址| 中文字幕一区不卡| 欧美日韩国产中文| 中文字幕狠狠干| 精品国产1区2区3区| 午夜av一区二区| 国产中文伊人| 欧美日韩国产一中文字不卡| 欧美在线视频第一页| 欧美日韩午夜在线| av影视在线看| 欧美亚洲视频在线看网址| 一本大道一区二区三区| 中文字幕欧美国内| 久草视频观看| 91久久大香伊蕉在人线| 国产黄色片中文字幕| 中文字幕亚洲在| 日韩中文字幕| 国产成人va亚洲电影| 99精品一级欧美片免费播放| 日韩精品视频在线| 91精品国产自产在线丝袜啪| www在线视频| 午夜少妇久久久久久久久| 日韩欧美中文第一页| 国产对白在线| 99在线精品视频免费观看20| 亚洲成av人综合在线观看| 97久久精品| 欧美日韩在线网站| 中文字幕国产欧美| a√免费观看在线网址www| 国产欧美 在线欧美| 欧美日韩中文字幕| 一区二区三区免费看视频| 国产 日韩 欧美 综合 一区| 国产99精品| 亚洲欧美伊人| 91精品国产自产观看在线| 精品欧美日韩精品| 一区三区二区视频| 欧美一级欧美三级在线观看| 精品婷婷伊人一区三区三| 一区二区在线看| 久久久91精品国产| 日韩欧美亚洲视频| 一级一片免费视频| 一区三区视频| 亚洲娇小xxxx欧美娇小| 国产亚洲短视频| 一区二区在线高清视频| 91麻豆精品国产91久久久使用方法| 日韩欧美在线第一页| 国产亚洲短视频| 日韩视频 中文字幕| 51精品免费网站| 在线视频色在线| 精品国产乱码久久久久久蜜臀| 国产福利一区在线观看| 国产在线欧美日韩| 日韩在线高清| 日韩在线视频观看| 欧美亚洲国产激情| 亚洲一区三区在线观看| 国产一级免费| 日韩wumaV| 亚洲第一中文字幕| 日韩欧美三级视频| 一本一道综合狠狠老| 在线看av的网址| 亚洲一区在线观看免费| 日韩国产专区| 中文字幕亚洲乱码| 欧美日韩综合在线| 国产网站av| 你懂的亚洲视频| 91精品久久久久久久久久| 二区中文字幕| 日韩激情一区| 精品国内自产拍在线视频| 91精品国产综合久久香蕉最新版| 精品国产31久久久久久| 国产黄色在线网站| 国产在线精品国自产拍免费| 久久99蜜桃精品| 国产一卡2卡3卡免费网站 | 亚洲欧美日本国产专区一区| 一区免费视频| 国产高清在线观看| 国内精品99| 欧美,日韩,国产在线| 中文字幕狠狠干| 亚洲欧美日本另类| 国产一级在线免费观看| 亚洲视频 中文字幕| 国产最顶级的黄色片在线免费观看| 日韩欧美99| 伊人伊成久久人综合网小说| 国产在线二区| 黄色片免费看| 国产亚洲二区| 91精品国产99| 亚洲福利在线看| 日韩不卡在线播放| 91精品综合久久久久久| 欧美日韩成人一区| 中文字幕日韩精品在线| 中文字幕亚洲在| 午夜av一区二区| 久久久精品福利| 亚洲女人天堂a在线播放| 亚洲理论中文字幕| 日韩在线a电影| 亚洲福利一区二区三区| 亚洲成在线观看| 蜜桃精品在线| 精品视频999| 在线观看精品国产| 欧美日韩免费高清| 久本草在线中文字幕亚洲欧美| 91av久久久| 国产裸体歌舞团一区二区| 亚洲国产欧美91| 日韩精品视频在线播放| 精品国产综合久久| 精品视频1区2区3区| www.中文字幕在线观看| 欧美日韩中文| 日韩福利视频导航| 欧美亚洲国产免费| 亚洲乱码中文字幕| 日韩欧美在线视频日韩欧美在线视频| 91精品在线观| 国产在线日韩欧美| 久久精品女人| 国产欧美日韩在线观看| 日韩精品视频中文字幕| 欧美日韩国产999| 午夜一区二区视频| www.老鸭窝.com| 国产一级片网站| 亚洲一二三不卡| 日韩一级免费视频| 久草视频观看| 快she精品国产999| 精品日韩在线观看| 91精品在线免费观看| 日韩av一区二区在线| 日韩欧美在线1卡| 欧美午夜精品在线| 欧美日韩精品免费在线观看视频| 最新日韩中文字幕| 国产成人精品免费久久久久| 精品日韩在线播放| 久久久久久自在自线| 久久 天天综合| 黄色一级大片在线免费看国产一| 91精品久久久久久久91蜜桃| 日韩精品―中文字幕| 91欧美在线| 亚洲国产福利视频| 五月综合激情日本mⅴ| 在线国产1区| 91精品999| 欧美日韩亚洲天堂| 日韩欧美中文字幕在线播放| 国产高潮久久久| 欧美久久在线| 国产欧美日韩最新| 欧美日韩国产首页在线观看| 日韩免费精品| 中文字幕欧美在线| 亚洲一区在线观看视频| 欧美日韩视频免费看| 亚洲欧美日本国产专区一区| 第一页在线观看| 欧美日韩中文| 欧美不卡视频一区发布| 精品乱人伦一区二区三区| 国产在线中文字幕| 欧美成人vr18sexvr| 99精品视频99| 欧美日韩激情在线一区二区三区| 亚洲欧洲国产视频| 亚洲a级在线播放观看| 日韩国产欧美在线视频| 欧美日韩不卡在线视频| 1区2区3区在线视频| 欧美高清一级片在线| 日韩欧美中文在线视频| 久久久99精品久久| 国产在线高潮| 久久久久久91| 国产欧美久久久精品影院| 国产视频97| 中文字幕精品一区二区三区在线| 亚洲综合在线视频| 亚洲视频资源在线| 91精品久久久久久久久久| 国产久卡久卡久卡久卡视频精品| 亚洲欧美中文字幕在线一区| 日韩欧美久久久| 欧美一级免费在线观看| 亚洲一区精品电影| 中文字幕日韩第一页| 欧美高清一区| 日韩在线一区二区视频| 久久精品国产成人一区二区三区| 欧美日韩在线中文字幕| 伊人亚洲视频| 日韩视频在线观看视频| 在线观看av的网站| 欧美久久在线| 国产高清视频一区二区| 国产乱国产乱300精品| 日韩免费高清一区二区| 国产免费久久| 久久91精品视频| 国产三级中文字幕| 91精品在线免费| 中文字幕欧美在线| 伊人亚洲视频| 中文字幕亚洲一区在线观看| 久久精品国产视频| 免费视频最近日韩| 国产小视频免费在线网址| 亚洲高清视频在线| 日韩欧美中文字幕在线播放| 深夜日韩欧美| 色一区在线观看| 久久精品一二三| 国产日韩精品在线| 久久精品在线免费观看| 91精品国产91久久久久久三级| 97久久精品| 中文字幕第一页在线播放| 国产一级网站视频在线| 狠狠色噜噜狠狠狠狠97| av最新网址| 日韩视频1区| 91精品在线观看国产| 午夜私人影院在线观看| 在线欧美日韩国产| 日韩午夜黄色| 日韩精品a在线观看91| 日韩黄色在线播放| 国产欧美久久久久久久久| 日本精品国语自产拍在线观看| 欧美自拍一区| 亚洲三级av| 视频一区视频二区中文| 97caopor国产在线视频| 国产精品一区二三区| a在线观看免费视频| 日韩中文字幕在线视频观看| 日韩国产亚洲欧美| 日韩在线欧美| 欧美日韩国产专区| 国产日韩在线视频|