Problem Description
Input
Output
Sample Input
01 011
Sample Output
NO 1
一個翻紙牌的遊戲, 是一個dfs的題目, 我還是很不懂, 後來看了大神的博客。
一個很好的思路就是判斷第一張牌是翻了還是沒有,對應兩次搜索,尋找最小的次數,
如果都不能 則就輸出NO了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;
char s[25];
int q[25];
int qq=9999999;
int dfs(int i,int l,int t)
{
if(i==l)
{
return q[i-1]?qq:t;
}
if(q[i-1])
{
q[i-1]=!q[i-1];
q[i]=!q[i];
q[i+1]=!q[i+1];
t++;
}
dfs(i+1,l,t);
}
int main()
{
while(~scanf("%s",s))
{
int ll=strlen(s);
for(int i=0;i<ll;i++)
{
q[i]=s[i]-'0';
}
q[0]=!q[0];//修改第一個了的
q[1]=!q[1];
int ans=dfs(1,ll,1);
for(int i=0;i<ll;i++)
{
q[i]=s[i]-'0';
}
ans=min(ans,dfs(1,ll,0));
if(ans==qq)
printf("NO\n");
else printf("%d\n",ans);
}
return 0;
}