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;
}
#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;
}
相关文章推荐
- UVa 10651 Pebble Solitaire(状态压缩DP)
- UVa 10651 Pebble Solitaire (DFS)
- UVA 10651 Pebble Solitaire(记忆化)
- UVA 10651 Pebble Solitaire 状态压缩dp
- UVA 10651 --Pebble Solitaire +dfs
- uva 10651 Pebble Solitaire (BFS)
- UVA 10651 Pebble Solitaire
- 【DP】UVA 10651 Pebble Solitaire 记忆化搜索
- 【UVA】10651-Pebble Solitaire(直接递归或者记忆化)
- uva 10651 Pebble Solitaire(动态规划:记忆化搜索)
- uva 10651 Pebble Solitaire
- UVa 10651 - Pebble Solitaire
- uva10651 Pebble Solitaire(记忆化搜索)
- UVA 10651 Pebble Solitaire(bfs+hash)
- UVa 10651 Pebble Solitaire (DP 卵石游戏 记忆化搜索)
- 【DP】UVA 10651 Pebble Solitaire 记忆化搜索
- UVA - 10651 Pebble Solitaire
- UVa 10651 Pebble Solitaire(状压DP)
- 记忆化搜索 uva-10651-Pebble Solitaire
- uva 10651 - Pebble Solitaire(记忆化搜索)