搜索|单词接龙 (vip) 蓝桥杯
单词接龙 (vip)
如果两个单词有联系,那么就将这两个单词联姻(他俩之间有一条边)吧!如此, 一张单词关系图就建好了, 然后
进行以特定单词为头开始搜索,得到符合要求的最大值!
附代码:
【搜索|单词接龙 (vip) 蓝桥杯】
/*************************************************************************
> File Name: words_dragon.c
> Author: xzl
> Mail:xiaolongqdu@gmail.com
> Created Time: 2014年03月20日 星期四 14时46分13秒
************************************************************************/#include
#include
#include
char str[25][10];
int map[25][25];
int n, visited[25], max_sum;
int length[25];
void init();
void dfs(int i, int v);
int change(char str1[], char str2[]);
int main(){int i, j;
int len1, len2, num, front, end, sum = 0;
char ch;
scanf("%d", &n);
for(i = 0;
i < n;
i++){
scanf("%s", str[i]);
length[i] = strlen(str[i]);
}
getchar();
scanf("%c", &ch);
max_sum = 0;
for(i = 0;
i < n;
i++){
if(str[i][0] == ch){
init();
visited[i] --;
dfs(i, length[i]);
// if(sum < max_sum){
//sum = max_sum;
//}
}
}
printf("%d\n", max_sum);
}
int change(char str1[], char str2[]){
int i, j;
int len1 = strlen(str1), len2 = strlen(str2);
int front1, front2;
for(i = 0;
i < len1;
i++){
front1 = i;
front2 = 0;
len2 = strlen(str2);
while(str1[front1] == str2[front2] && str1[front1] && str2[front2]){
front1 ++;
front2++;
}
if(front1 == len1 && i == 0){
return 0;
}
else if(front1 == len1 && front2 == len2){
return 0;
}
else if(front1 == len1 && i != 0 && front2 != len2){
return (len1 - i);
}
}
return 0;
}
void dfs(int v, int sum){int i, var;
printf("%d %d %d\n", v, sum, visited[v]);
if(sum > max_sum){
max_sum = sum;
}for(i = 0;
i < n;
i++){
if(map[v][i] != 0 && visited[i] > 0){
visited[i]--;
dfs(i, sum + length[i] - map[v][i]);
visited[i]++;
}
}
}
void init(){
int i;
for(i = 0;
i <= n;
i++){
visited[i] = 2;
}
}
/*
3
tou
out
abc
t
*/
推荐阅读
- 【译】20个更有效地使用谷歌搜索的技巧
- locate搜索
- springboot结合redis实现搜索栏热搜功能及文字过滤
- 茶事|茶事 | 单丛里的一泡奇葩
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- 销量搜索
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- 17个搜索引擎
- 搜索引擎有哪些
- 05-1如何搜索与收集学习资料