动态规划--LCS
来源:互联网 发布:北京教育软件 编辑:程序博客网 时间:2024/05/18 09:16
/************************************************************* * file:lcs.c * brief:基于动态规划,求两个字符串的最长公共子序列 * yejing@2015.2.3 1.0 creat *************************************************************/ #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#define MATRIX_MLEN 128typedef enum{DIR_UP,DIR_LEFT,DIR_UP_LEFT}DIR_t;void generate_lcs_matrix(char* str1, int len1, char* str2, int len2, int lcs_matrix[][MATRIX_MLEN], int dir_matrix[][MATRIX_MLEN]){int i = 0, j = 0;if(len1 > MATRIX_MLEN || len2 > MATRIX_MLEN)assert(0);for(i = 0; i <= len1; ++i)lcs_matrix[i][0] = 0;for(j = 0; j <= len2; ++j)lcs_matrix[0][j] = 0;for(i = 1; i <= len1; ++i){for(j = 1; j <= len2; ++j){if(str1[i - 1] == str2[j - 1]){lcs_matrix[i][j] = lcs_matrix[i - 1][j - 1] + 1;dir_matrix[i][j] = DIR_UP_LEFT;}else if(lcs_matrix[i - 1][j] >= lcs_matrix[i][j - 1]){dir_matrix[i][j] = DIR_UP;lcs_matrix[i][j] = lcs_matrix[i - 1][j];}else{dir_matrix[i][j] = DIR_LEFT;lcs_matrix[i][j] = lcs_matrix[i][j - 1];}}}return;}void show_lcs(int dir_matrix[][MATRIX_MLEN], char* str1, int i, int j){if(i == 0 || j == 0)return;if(dir_matrix[i][j] == DIR_UP_LEFT){show_lcs(dir_matrix, str1, i - 1, j - 1);printf("%c ", str1[i - 1]);}else if(dir_matrix[i][j] == DIR_LEFT){show_lcs(dir_matrix, str1, i, j - 1);}else{show_lcs(dir_matrix, str1, i - 1, j);}return;}int main(int argc, char* argv[]){char* str1 = "aqswdefrgthyjukil";char* str2 = "azsxdcfvgbhnjmkl";int lcs_matrix[MATRIX_MLEN][MATRIX_MLEN];int dir_matrix[MATRIX_MLEN][MATRIX_MLEN];generate_lcs_matrix(str1, strlen(str1), str2, strlen(str2), lcs_matrix, dir_matrix);show_lcs(dir_matrix, str1, strlen(str1), strlen(str2));printf("\n");return 1;}
0 0
- 动态规划之LCS
- 动态规划 LCS
- 动态规划中LCS
- 动态规划 LCS,LIS
- 动态规划--LCS
- 动态规划:LCS
- 动态规划--LCS计算
- 动态规划(三.LCS)
- 动态规划-LCS
- 动态规划入门之LCS
- LCS的动态规划算法
- 动态规划解LCS问题
- POJ1458 动态规划 (LCS,水)
- 动态规划之LCS问题
- 动态规划——LCS
- LCS问题求解-动态规划
- 动态规划(二.LCS)
- 动态规划--LIS与LCS
- 【django】 models中的字段属性
- 【PB】如何给datawindow某一列动态设置成dddw或者ddlb,并且赋值
- Java Web笔记:Java EE架构及Java EE核心设计模式(MVC)
- Topcoder Srm 649 DIV1
- 深入研究PHP及Zend Engine的线程安全模型
- 动态规划--LCS
- Spring中xxx-servlet.xml跟applicationContext.xml的认识
- Android 封装json数据
- 双链表插入函数(测试部分未完成)
- iOS--定义变量中的指示符assign、atomic(nonatomic)、copy、readonly、readwrite、retain、strong、weak、unsafe_unretained
- Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce - Spark
- js Stack overflow at line x
- 使用CDN的好处
- Intellij IDEA 使用大全