| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1393 人关注过本帖
标题:求最长公共子序列 运行时不能输出子序列的结果 单步执行时 ...
只看楼主 加入收藏
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:4 
求最长公共子序列 运行时不能输出子序列的结果 单步执行时b[i][j]=-858993460 求解
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

#define M 100
#define N 100


int num;

//最长公共子序列的长度
void LCS_length(char x[],char y[])
{
    int m,n,i,j;
    int c[M][N],b[M][N];
    for(i=0;i<=m;i++)
    {
        for(j=0;j<=n;j++)
         b[i][j]=0;
    }
    m=num;//数组x的长度
    n=num;//数组Y的长度
   
    for(i=0;i<=m;i++)
        c[i][0]=0;
    for(j=1;j<=n;j++)
        c[0][j]=0;
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(x[i-1]==y[j-1])
            {
                c[i][j]=c[i-1][j-1]+1;
                b[i][j]=1;//斜
            }
            else if(c[i-1][j]>=c[i][j-1])
            {
                c[i][j]=c[i-1][j];
                b[i][j]=2;//上
            }
            else
            {
                c[i][j]=c[i][j-1];
                b[i][j]=3;//左
            }
            
        }
    }
    printf("最长公共子序列的长度为:%d\n",c[m][n]);
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
            printf("%d ",b[i][j]);
        printf("\n");
    }
    //printf("%d ",b[m][n]);
    //return 0;
}

//最长公共子序列
int Print_LCS(int b[M][N],char x[],int i,int j)
{
    if(i==0||j==0)
        return;
    if(b[i][j]==1)
    {
        Print_LCS(b,x,i-1,j-1);
        printf("%c ",x[i-1]);
    }
    else
        if(b[i][j]==2)
        Print_LCS(b,x,i-1,j);
    else
        Print_LCS(b,x,i,j-1);
    return 0;
   
}


int main()
{
       FILE *fp;
    char number;
    int i,m,n,b[M][N];
    char x[M],y[N];
    srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
   
   
    printf("产生的字母的个数:");
    scanf("%d",&num);
   
    fp=fopen("input.txt","w");
    if(fp==NULL)
    {
        printf("open file failed\n");
        return -1;
    }
   
    for (i=0; i<num; i++)
    {
        
        number = rand() % 4 + 'a' ; //产生字母的随机数
        x[i] = number;
        fprintf(fp,"%c ",x[i]);
    }
    fprintf(fp,"\n");
   
    for (i=0; i<num; i++)
    {
        
        number = rand() % 4 + 'a' ; //产生字母的随机数
        y[i] = number;
        fprintf(fp,"%c ",y[i]);
    }
    fprintf(fp,"\n");
   
    fclose(fp);
    LCS_length(x,y);
    m=num;//数组x的长度
    n=num;//数组Y的长度
    printf("最长公共子序列为:");
    Print_LCS(b,x,m,n);
    return 0;
}
搜索更多相关主题的帖子: include 
2016-04-26 20:35
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:7 
程序代码:
    int m=num,n=num,i,j;
    int c[M][N],b[M][N];
    for(i=0;i<=m;i++)
    {
        for(j=0;j<=n;j++)
         b[i][j]=0;
    }
    /*m=num;//数组x的长度
    n=num;//数组Y的长度*/

未佩好剑,转身便已是江湖
2016-04-26 22:56
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:7 
    FILE *fp;
    char number;
    int i,m,n,b[M][N];
    char x[M],y[N];
    srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样

    m=num;//数组x的长度
    n=num;//数组Y的长度
一个是整形,一个是字符型,字符型怎么能赋值给整形

[此贴子已经被作者于2016-4-27 07:22编辑过]


其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-04-27 06:26
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
收藏
得分:0 
回复 2楼 alice_usnet
我改了还是不行啊啊
2016-04-27 21:26
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
收藏
得分:0 
回复 3楼 zhulei1978
字符型的是number  num是整形的 是全局变量
2016-04-27 22:48
快速回复:求最长公共子序列 运行时不能输出子序列的结果 单步执 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015501 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved