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
原创粉丝点击