您的位置:首页 > 其它

pku2250--Compromise(最长公共子串,记录结果)

2009-01-08 23:39 579 查看
题目很简单,多一个记录。。。。

忘了一个等于号,害我弄了大概一个小时。。。

郁闷了,考虑真不全面。。

代码如下:

Code

#include<stdio.h>

#include<string.h>

char a[105][35],b[105][35];

char result[105][35];

int opt[105][105],best[105][105];

int lena,lenb;

void init()

{

int i,j;

for(i=0;i<105;i++)

best[i][0]=best[0][i]=0;

}

int input()

{

lena=lenb=0;

if(scanf("%s",a[1])==EOF)

return 0;

else{

lena=1;

while(scanf("%s",a[++lena]),strcmp(a[lena],"#"))

;

lena--;

while(scanf("%s",b[++lenb]),strcmp(b[lenb],"#"))

;

lenb--;

}

return 1;

}

void output()

{

int i,j;i=lena;j=lenb;

while(best[i][j]){

if(opt[i][j]==0){

strcpy(result[(best[i][j])],a[i]);

i--;j--;

}

else if(opt[i][j]==-1)

i--;

else if(opt[i][j]==1)

j--;

}

for(i=1;i<best[lena][lenb];i++)

printf("%s ",result[i]);

printf("%s\n",result[(best[lena][lenb])]);

}

void process()

{

int i,j;

for(i=1;i<=lena;i++)

for(j=1;j<=lenb;j++){

if(strcmp(a[i],b[j])==0){

best[i][j]=best[i-1][j-1]+1;

opt[i][j]=0;

}

else if(best[i-1][j]>=best[i][j-1]){

best[i][j]=best[i-1][j];

opt[i][j]=-1;

}

else if(best[i][j-1]>best[i-1][j]){

best[i][j]=best[i][j-1];

opt[i][j]=1;

}

}

}

int main()

{

init();

while(input()){

process();

output();

}

return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: