欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态规划求公共子序列问题

程序员文章站 2024-02-25 08:28:28
...

希望大神帮我看看这段代码的传参为什么会报错

这个是一个动态规划的问题,求最长子序列的问题

以下是我的代码,主要的问题就是:主函数中调用函数的时候提示b[ ][ ]有问题
[Error] cannot convert ‘int ()[n]’ to ‘int**’ for argument ‘5’ to 'void LCSlength(int, int, char, char*, int**, int**)’
[Error] cannot convert ‘int ()[n]’ to ‘int**’ for argument ‘4’ to 'void LCS(int, int, char, int**)’

#include<stdio.h>
#include<stdlib.h>
void LCSlength(int m,int n,char *x,char *y,int **c,int **b){
	int j,i;
	for(i=0;i<m;i++)
		c[i][0] = 0;
	for(j=0;j<n;j++)
		c[0][j]=0;
	for(i=1;i<m;i++){
		for(j=1;j<n;j++){
			if(x[i]==y[j]){
				c[i][j]=c[i-1][j-1]+1;
				b[i][j]=1;
			}
			else if(c[i][j-1]>=c[i-1][j]){
				c[i][j] = c[i][j-1];
				b[i][j] = 2;
			}
			else {
				c[i][j] = c[i-1][j];
				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);
		printf("%c",x[i]);
	}
	if(b[i][j]==2)
		LCS(i-1,j,x,b);
	else
		LCS(i,j-1,x,b);
}
int main(){
	int m,n;
	m=7;
	n=8;
	char x[m];
	char y[n];
	int c[m][n];
	int b[m][n];
	LCSlength(m,n,x,y,c,b);
	LCS(m,n,x,b);
	return 0;
}