今晚在被几串代码给困住了,就是一个回溯的,但是我就是感觉是一个死循环,然后经过一晚上的不懈划水,最后终于想明白了。先看代码吧!
#include <bits/stdc++.h>
#include<iostream>
#include <iostream>
using namespace std;
int f[10];
int ans=0;
void dfs(int x){
for(int i=0;i<2;i++)
if(f[i]<=1){
f[i]++;
ans++;
cout<<i<<endl;
dfs(ans);
cout<<ans<<" "<<i<<" "<<f[i]<<endl;
f[i]--;//回溯 }
}
int main(){
dfs(ans);
}
运行结果如下
0
0
1
1
4 1 2
4 1 1
4 0 2
1
0
1
7 1 2
7 0 2
1
0
9 0 2
9 1 2
9 1 1
9 0 1
1
0
0
1
13 1 2
13 0 2
1
0
15 0 2
15 1 2
15 0 1
1
0
0
18 0 2
18 0 1
18 1 2
18 1 1
首先先来说一说刚开始我感觉他为啥是一个死循环吧,就是因为他有f[i]++
,但是等到这个一个循环的dfs结束之后他又f[i]--
,一直周而复始。
当然这个运行结果也只是来看数据好看来用的,现在是明白了,他回溯其实就相当于一个树往上遍历,知道遍历带最后上面的那一层。(其实这个题就相当于到dfs上方遍历的等于下方遍历的时候就结束了)
最近也在做搜索的题,但是我还是比较爱钻牛角尖,总是想自己在脑子中运行一遍代码,看看到底是怎么回事,但是往往运行到一半就开始出现问题了。所以就进度还是比较慢的,每一个代码还是要想他到底一步一步怎么实现(感觉每从一个算法到另一种算法都很难受,这是不是说明我在进步啊 hhh)但是,其他的算法还是都是依靠这搜索。最终总结了一个结论递归YYDS!!(好像前话不搭后话hhhh)
最后吧!好像也没啥说的,就是一个小小的知识总结,也不是周结就不说太多了,也不抒发太多的感情了,acm不需要感情!(◎_◎;)。
over!!希望今晚不失眠!!!