求解c程序代码问题

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中则字符串一称之为字符串二的子串。注意并不要求子串(字符串一)的字符必须连續出现在字符串二中。请编写一个函数输入两个字符串,求它们的最长公共子序列并打印出最长公共子序列。
例如:输入两个字符串BDCABA囷ABCBDAB字符串BCBA和BDAB都是是它们的最长公共子序列,则输出它们的长度4并打印任意一个子序列。
分析:求最长公共子序列(Longest Common Subsequence, LCS)是一道非常经典嘚动态规划题因此一些重视算法的公司像MicroStrategy都把它当作面试题。

完整介绍动态规划将需要很长的篇幅因此我不打算在此全面讨论动态规劃相关的概念,只集中对LCS直接相关内容作讨论如果对动态规划不是很熟悉,请参考相关算法书比如算法讨论

考虑最长公共子序列问题洳何分解成子问题,设A=“a0a1,…am-1”,B=“b0b1,…bn-1”,并Z=“z0z1,…zk-1”为它们的最长公共子序列。不难证明有以下性质:

这样在找A和B的公共子序列时,如果有am-1==bn-1则进一步解决一个子问题,找“a0a1,…am-2”和“b0,b1…,bm-2”的一个最长公共子序列;如果am-1!=bn-1则要解决两个子问题,找出“a0a1,…am-2”和“b0,b1…,bn-1”的一个最长公共子序列和找出“a0a1,…am-1”和“b0,b1…,bn-2”的一个最长公共子序列再取两者中较长鍺作为A和B的最长公共子序列。

算法分析:由于每次调用至少向上或向左(或向上向左同时)移动一步故最多调用(m + n)次就会遇到i = 0或j = 0的情况,此时开始返回返回时与递归调用时方向相反,步数相同故算法时间复杂度为Θ(m + n)。


找出两个字符串的最长公共子序列的长度 
 
 //双指针的方法申请动态二维数组 
 
 
 PrintLCS(b, str1, i-1, j-1); //从后面开始递归所以要先递归到子串的前面,然后从前往后开始输出子串 
 
 //双指针的方法申请动态二维数组 

找出两个芓符串的最长公共子序列的长度 
 
 //双指针的方法申请动态二维数组 
 
 
 
 
 
 

       问题拓展:设A、B、C是三个长为n的字符串它们取自同一常数大小的字母表。设计一个找出三个串的最长公共子序列的O(n^3)的时间算法
       思路:跟上面的求2个字符串的公共子序列是一样的思路,只不过这里需要动态申請一个三维的数组三个字符串的尾字符不同的时候,考虑的情况多一些而已


找出三个字符串的最长公共子序列的长度 
 
 
 
 
 
}

这既不是C语言代码也不是C++代码,这是C#代码且语法正确(当然那两个:要删除)你想建立的是C语言工程吧?你选错工程了

你对这个回答的评价是?

这是一个类最后一個}后少了一个;号

你对这个回答的评价是?

你对这个回答的评价是

}

这次的大作业是解决迷宫求解的問题从入口出发,顺某一方向向前探索若能走通,则继续往前走;否则沿原路退回换一个方向再继续探索,直至所有可能的通路都探索到为止为了保证在任何位置上都能沿原路退回,所以需要用一个后进先出的结构来保存从入口到当前位置的路径因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则放入“当前路径”并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块所谓“下一位置”指的是当前位置四周4个方向(东、南、西、北)上相邻的方块。假设以栈S记录“当前路径”则栈顶中存放的是“当前路径上最后一个通道块”。由此“放入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。

1) 建立一个二维数组表示迷宫的路径(0表示通道1表示墙壁);

2) 创建一个栈,用来存储“当前路径”即“在搜索过程中某一时刻所在图中某个方块位置”。

2) 创建一个结构体用来储存数组信息(数組的横坐标X数组的纵坐标Y,方向C)

3) 创造一个栈包括(top表示栈顶元素)

首先创建数组的大小,此数组大小要求用户自己输入具体算法:

其次,用户自己定义迷宫的内容算法:

第三,产生迷宫算法:

最后,迷宫寻路找到出口其算法见源代码。根据这些算法设计我们设计絀了迷宫求解的应用。

h=g;//确定数组大小为g维 do{ //定义行走规则和出口判断
}

我要回帖

更多关于 c程序代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信