//发现dfs除了搜索功能外的其他功能,他本身是一种序列,这个题恰是“先序”的下一个(合法范围内)序列!

#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct state
{
string s;
int sum_0;
int sum_1;
};
vector<state>v;
bool flag;
void dfs(int cur,state ss,int size,string xulie)
{
if(cur%2==0) //剪枝一:一旦发现小了,马上回溯!
{
string temp1(xulie,0,cur-1);//只比前cur个字符
if(ss.s<temp1)
{
return;
}
}
if(flag==1)return;
if(cur==size) //一次获得即可返回,DFS序列本可以是字典序!
{
if(ss.sum_0==ss.sum_1&&ss.s>xulie)
{ v.push_back(ss);flag=1;}
}
else
{
if(ss.sum_0<=size/2)
{
state temp_ss(ss); //只建立临时对象传递下去!
temp_ss.sum_0=ss.sum_0+1;temp_ss.s=ss.s+"0";
dfs(cur+1,temp_ss,size,xulie);
}
if(ss.sum_1+1<=ss.sum_0)
{
state temp_ss(ss);
temp_ss.sum_1=ss.sum_1+1;temp_ss.s=ss.s+"1";
dfs(cur+1,temp_ss,size,xulie);
}
}
}
int main()
{ string xulie;
while(cin>>xulie)
{
v.clear();
flag=0;
state ss;
ss.s="0";ss.sum_0=1;ss.sum_1=0; for(int i=0;i<xulie.size();i++)
{
if(xulie[i]=='(')
xulie[i]='0';
else
xulie[i]='1';
}
dfs(1,ss,xulie.size(),xulie);
if(!v.empty())
{
string temp2;
for(int i=0;i<v[0].s.size();i++)
{
if((v[0].s)[i]=='0')
temp2+='(';
else
temp2+=')';
}
cout<<temp2<<endl;
}
else cout<<"No solution"<<endl;
}
}

最新文章

  1. 23种设计模式--观察者模式-Observer Pattern
  2. Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示
  3. SQL SERVER连接、合并查询
  4. Odoo下拉动作列表
  5. SQL Server 导入大数据脚本
  6. 使用zookeeper实现分布式master选举(c 接口版本)
  7. UiThread DEMO
  8. SVN 冲突文件快速解决方法
  9. python出现Non-ASCII character &#39;\xe7&#39; in file ex6.py on line 1, but no encoding declare错误
  10. Kruskal算法构造最小生成树
  11. 正确开启Mockjs的三种姿势:入门参考(一)
  12. springboot注解大全
  13. Redis无法保存ef复杂对象
  14. Gravitee.io docker-compose运行
  15. DevExpress10、RichEditControl
  16. 伪造A标签跳转(非window.open)Jquery
  17. 【Foreign】Uria [欧拉函数]
  18. one jar(转)
  19. 去除DialogFragment的背景阴影,背景色,标题栏
  20. 解决ionic 上拉加载组件 ion-infinite-scroll自动调用多次的问题

热门文章

  1. vue2.0组件生命周期探讨
  2. Photoshop 注册破解
  3. codevs 2600 13号星期几?
  4. Oracle的Central Inventory和Local inventory详解
  5. Python中Pickle模块的dump()方法和load()方法
  6. Hbase数据库简介
  7. MFC (Combo-box control)下拉列表控件的使用
  8. Windows下使用ffmpeg与java实现截取视频缩略图
  9. EBS ORACLE使用API批量取消销售订单
  10. j数组对象去重