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 |
有神牛来检查下我的程序么?试了discuss里的所有数据,不知WA在何处#include <stdio.h > #include <stdlib.h> #include <string.h> #define true 1 #define false 0 #define MAX 26 typedef struct TrieNode{ int isStr; struct TrieNode* next[MAX]; int page; }Trie; typedef struct OutPut{ char s[20]; int order; }OutPut; int cmp(const void* a,const void* b) { return ((OutPut*)a)->order-((OutPut*)b)->order; } void insert(Trie *root,char *s,int k) { int i; Trie *p=root; if(root==NULL||*s=='\0')return; while(*s!='\0') { if(p->next[*s-'a']==NULL) //如果不存在,则建立结点 { Trie *temp=(Trie *)malloc(sizeof(Trie)); for(i=0;i<MAX;i++) temp->next[i]=NULL; temp->isStr=false; p->next[*s-'a']=temp; p=p->next[*s-'a']; } else p=p->next[*s-'a']; s++; } p->isStr=true; p->page=k; } int search(Trie *root,char *s) { Trie *p=root; while(p!=NULL&&*s!='\0') { p=p->next[*s-'a']; s++; } if(p!=NULL&&p->isStr==true) return p->page; else return false; } void del(Trie *root) { int i; for(i=0;i<MAX;i++) { if(root->next[i]!=NULL) { del(root->next[i]); } } free(root); } void solve(Trie *root,const char *s) { int len,position,i,j; char sTemp[20]; OutPut prt[20]; int status; len =strlen(s); // printf("%d",status=search(root,s)); if(search(root,s)) printf("%s is correct",s); else{ printf("%s: ",s); for(position=0,j=0;position<len;position++)//position { for(i=0;i<position;i++)sTemp[i]=s[i]; for(++i;i<len;i++)sTemp[i-1]=s[i]; sTemp[i-1]='\0'; if(status=search(root,sTemp)) { strcpy(prt[j].s,sTemp); prt[j].order=status; j++; } } /*********接下来考虑替换一个单词的情况*****/ for(position=0;position<len;position++) { strcpy(sTemp,s); for(i=0;i<26;i++) { sTemp[position]='a'+i; if(status=search(root,sTemp)) { //printf("Replace......................\n"); strcpy(prt[j].s,sTemp); prt[j].order=status; j++; } } } /***接下来考虑最复杂的情况:增添一个单*****/ for(position=0;position<=len;position++) { for(i=0;i<position;i++) sTemp[i]=s[i]; for(++i;i<=(len+1);i++)//=代表将'\0'一起copy sTemp[i]=s[i-1]; for(i=0;i<26;i++)//分别插入26个字母的情况 { sTemp[position]='a'+i; if(status=search(root,sTemp)) { //printf("Add.......................\n"); strcpy(prt[j].s,sTemp); prt[j].order=status; j++; } } } qsort(prt,j,sizeof(prt[0]),cmp); for(i=0;i<j;i++) { printf("%s ",prt[i].s); if(prt[i].order==prt[i+1].order)i++; } } printf("\n"); } int main() { Trie *root; int i; char s[20]; //printf("%d",i=3); root=(Trie*)malloc(sizeof(Trie)); memset(root->next,0,MAX*sizeof(Trie*)); root->isStr=false; i=1; while(scanf("%s",s)&&strcmp(s,"#")!=0) {insert(root,s,i);i++;} while(scanf("%s",s)&&strcmp(s,"#")!=0) { solve(root,s); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator