canArrangeWords
来源:互联网 发布:制作mod的软件 编辑:程序博客网 时间:2024/05/16 07:43
/*a[]为开头字母组成的数组b[]为结尾字母组成的数组flag[i]表示第i个单词在组串的过程中的位置,flag[i]=0表示单词不在串中,flag[i]=x表示单词在串中的第x个位置depth表示当前串中已经有多少个单词indexa表示当前串的第一个单词在数组中的下标indexb表示当前串的最后一个单词在数组中的下标 */#include<stdio.h>#include<stdlib.h>int canArrangeWords(char *a,char *b,int *flag,int num,int depth,int indexa,int indexb){int i,j,ret;if(depth == num){for(i = 0;i < num;i ++){if(flag[i] == 0)break;}if(i == num)return 1;elsereturn 0;}for(i = 1;i < num;i ++){if(flag[i] == 0 && b[i] == a[indexa]){flag[i] = 1;for(j = 0;j < num;j ++){if(flag[j] != 0 && j != i)flag[j] ++;}ret = canArrangeWords(a,b,flag,num,depth + 1,i,indexb);if(ret == 1)return 1;else{for(j = 0;j < num;j ++)if(flag[j] != 0)flag[j] --;}}if(flag[i] == 0 && a[i] == b[indexb]){flag[i] = depth + 1;ret = canArrangeWords(a,b,flag,num,depth + 1,indexa,i);if(ret == 1)return 1;elseflag[i] = 0;}}return 0;}int main(){char *a,*b;char c;int *flag;int num;int i,ret;scanf("%d",&num);getchar();a = (char *)malloc(sizeof(char)*num);b = (char *)malloc(sizeof(char)*num);flag = (int *)malloc(sizeof(int)*num);for(i = 0;i < num;i ++){scanf("%c",&c);a[i] = c;while(1){scanf("%c",&c);if(c == '\n')break;b[i] = c;}flag[i] = 0;}flag[0] = 1;ret = canArrangeWords(a,b,flag,num,1,0,0);printf("%d\n",ret);return 0;}
0 0
- canArrangeWords
- 单词接龙:canArrangeWords
- LightOJ 1422 Halloween Costumes (区间dp)
- XML 可扩展标记语言
- 在Linux环境下mysql的root密码忘记解决方法
- POJ 2594 二分图最小路径覆盖
- CodeForces 557A-Ilya and Diplomas【模拟】
- canArrangeWords
- Ajax 请求返回 html 页面并展示
- (一)C++语言中类对象的本质
- 51nod 1022 石子归并 环形+四边形优化
- arm9+linux fl2440 GPRS SIM卡 模块 ppp拨号上网
- RESTFUL API 安全设计指南
- Codeforces 525C. Ilya and Sticks
- Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?
- java--ArrayList去除集合中字符串的重复值