您的位置:首页 > 大数据 > 人工智能

uva 10651 Pebble Solitaire

2014-06-03 23:05 781 查看
简单的dfs题目

#include <stdio.h>
#include <string.h>
#include <vector>
#include <set>
using namespace std;

int min_len;
set<int> visited;

int _hash(char *str){
int sum, base, i;

base = 1;
sum = 0;
for(i=0; i<=11; i++){
if(str[i] == 'o')
sum += base;
base <<= 2;
}
return sum;
}

int get_stone_num(char *str){
int i, sum;
sum = 0;
for(i=0; i<=11; i++){
if('o' == str[i])
sum++;
}
return sum;
}

void dfs(char *cur_sta){
int len, i, hash_v;
char *p;
char buf[13];
vector<int> choose_index;

hash_v = _hash(cur_sta);
if(visited.find(hash_v) != visited.end())
return;

len = get_stone_num(cur_sta);
if(len < min_len)
min_len = len;

visited.insert(hash_v);

for(i=0; i<=9; i++){
if(cur_sta[i]=='-' && cur_sta[i+1]=='o' && cur_sta[i+2]=='o'){
strcpy(buf, cur_sta);
buf[i] = 'o';
buf[i+1] = '-';
buf[i+2] = '-';
dfs(buf);
}
}

for(i=0; i<=9; i++){
if(cur_sta[i]=='o' && cur_sta[i+1]=='o' && cur_sta[i+2]=='-'){
strcpy(buf, cur_sta);
buf[i] = '-';
buf[i+1] = '-';
buf[i+2] = 'o';
dfs(buf);
}
}
}

void func(const char *buf){
char cur_sta[13];

strcpy(cur_sta, buf);
min_len = 12;
visited.clear();
dfs(cur_sta);
printf("%d\n", min_len);
}

int main(void){
int n;
char buf[20];

//freopen("input.dat", "r", stdin);
scanf("%d", &n);
while(n--){
scanf("%s", buf);
func(buf);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm uva