请教高手

zhufeiguanghui 2008-12-12 11:59:05
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void LCS_length(int m,int n,char* x, char* y,int** c,int** b)
{
int i,j;
for(i=1;i<=m;i++) c[i][0]=0;程序在这里中断!
for(i=1;i<=n;i++) c[0][i]=0;

for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(x[i]==x[j])
{
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;
}
}

}

void LCS(int i, int j,char *x,int** b)
{
if(i ==0 || j == 0)
return;
if(b[i][j] == 1)
{
LCS(i-1,j-1,x,b);
cout<<x[i];
}
else if(b[i][j] == 2)
{
LCS(i-1,j,x,b);
}
else
{
LCS(i,j-1,x,b);
}
}

int main()
{
// char* X = "ABCBDAB";
// char* Y = "BDCABA";
char* X = "ACCGGTCGAGTGCGCGGAAGCCGGCCGAA";
char* Y = "GTCGTTCGGAATGCCGTTGCTCTGTAAA";
int m = strlen(X);
int n = strlen(Y);

int** c;
int** b;
LCS_length(m,n,X,Y,c,b);

LCS(m,n,X,b);

return 0;
}


这是求最长公共子序列的程序,为什么执行不了呢?
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-12-12
  • 打赏
  • 举报
回复
楼上的明显不行哦,小了要用m+1

本非高手
#include <stdio.h> 
#include <string.h>
#include <iostream>
using namespace std;
void LCS_length(int m,int n,char* x, char* y,int** c,int** b)
{
int i,j;
for(i=1;i <=m;i++) c[i][0]=0;//程序在这里中断!
for(i=1;i <=n;i++) c[0][i]=0;

for(i=1;i <=m;i++)
for(j=1;j <=n;j++)
{
if(x[i]==x[j])
{
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;
}
}

}

void LCS(int i, int j,char *x,int** b)
{
if(i ==0 || j == 0)
return;
if(b[i][j] == 1)
{
LCS(i-1,j-1,x,b);
cout <<x[i];
}
else if(b[i][j] == 2)
{
LCS(i-1,j,x,b);
}
else
{
LCS(i,j-1,x,b);
}
}

int main()
{
// char* X = "ABCBDAB";
// char* Y = "BDCABA";
char* X = "ACCGGTCGAGTGCGCGGAAGCCGGCCGAA";
char* Y = "GTCGTTCGGAATGCCGTTGCTCTGTAAA";
int m = strlen(X);
int n = strlen(Y);

int** c = new int*[m+1];
for(int i = 0; i < m+1; i++)
c[i] = new int[n+1];
int** b = new int*[m+1];
for(int i = 0; i < m+1; i++)
b[i] = new int[n+1];

LCS_length(m,n,X,Y,c,b);
LCS(m,n,X,b);

for(int i = 0; i < m+1; i++)
delete []c[i];
delete []c;
for(int i = 0; i < m+1; i++)
delete []b[i];
delete []b;
return 0;
}


输出:

CCGGTCGGGGCGGCCGA
Leejun527 2008-12-12
  • 打赏
  • 举报
回复
int** c;
int** b;
改为int c[m][n],b[m][n];
lann64 2008-12-12
  • 打赏
  • 举报
回复
int** c;
int** b;
LCS_length(m,n,X,Y,c,b);
---------------
b和c指向的地方都没分配空间。
elephont9527 2008-12-12
  • 打赏
  • 举报
回复
int** c;
int** b;
LCS_length(m,n,X,Y,c,b);

c和b初始化了么? 执行for(i=1;i <=m;i++) c[i][0]=0;会导致什么后果?能跑起来就怪了
coverallwangp 2008-12-12
  • 打赏
  • 举报
回复
你的二维数组int** c;
int** b;
没有分配内存空间
Leejun527 2008-12-12
  • 打赏
  • 举报
回复
你的c,b指针没有分配空间,你对它的内容操作(c[i][0]=0;)当然会出错。
zhufeiguanghui 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ztz0223 的回复:]
楼上的明显不行哦,小了要用m+1

本非高手

C/C++ code#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void LCS_length(int m,int n,char* x, char* y,int** c,int** b)
{
int i,j;
for(i=1;i <=m;i++) c[i][0]=0;//程序在这里中断!
for(i=1;i <=n;i++) c[0][i]=0;

for(i=1;i <=m;i++)
for(j=1;j <=n;j++)
{

[/Quote]

你的程序不能把所有的最长公共子序列都输出来啊!怎么办啊?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧