Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
分享个dfs解法 据说都是用map 我怎么就是想到dfs#include<iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; #define N 105 #define M 10 char map[N][M]; char mark[N]; char s[N],ans[M]; int n,len; bool vis[M],flag; void dfs(int step){ int i,j; if(step == len){ ans[len] = '\0'; for(j = 0; j < n; ++j){ if(!strcmp(map[j],ans) && !mark[j]){ mark[j] = 1; printf("%s\n",map[j]); flag = 1; return ; } } } for(i = 0; i < len; ++i){ if(!vis[i]){ vis[i] = 1; ans[step] = s[i]; dfs(step+1); vis[i] = 0; } } } int cmp(const void * a,const void *b){ return *(char *)a - *(char *)b ; } int main(){ n = 0; while(scanf("%s",s)!=EOF){ if(!strcmp("XXXXXX",s)) break; else strcpy(map[n++],s); } while(scanf("%s",s)!=EOF){ if(!strcmp("XXXXXX",s)) break; len = strlen(s); qsort(s,len,sizeof(s[0]),cmp); memset(vis,0,sizeof(vis)); memset(mark,0,sizeof(mark)); flag = 0; dfs(0); if(!flag) printf("NOT A VALID WORD\n"); printf("******\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator