软件开发实践报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生实验报告

实验名称:软件开发实践

指导教师:

姓名:

学号:

班级:

日期:

实验报告

姓名: 学号:

一、实验号题目:寻找所有的路径

二、实验的目的和要求:

读懂一段程序的代码,学会里面分析问题的思路,规范自己写代码.在阅读大量源代码的时候,能够提高自己对大的软件的把握能力,快速了解脉络,熟悉细节,不仅仅是编程技巧,还能在程序的架构,设计方面提高自己的能力。

三、算法描述:

你将给的字符串存储在一个矩形格子中。在这个矩形格子寻找一个字符串。出发点可能在格子中任何地方。方向可能向上,下,左,右,或对角的一个字母到下一个字母, 每个格子只能占用一次。你要归还int类型的数来表示所有可能的路径的数目。如果返回结果是超过1,000,000,000,的用-1表示.;

eg:

{"ABC", "FED", "GAI"} "ABCDEA" Returns: 2 {"ABC",

"FED",

"GHI"}

"ABCDEFGHI"

Returns: 1

{"ABC",

"DEF",

"GHI"}

"ABCD"

Returns: 0

{"AAAAA",

"AAAAA",

"AAAAA",

"AAAAA",

"AAAAA"}

"AAAAAAAAA

AA"

Returns: -1

{"ABABA",

"BABAB",

"ABABA",

"BABAB",

"ABABA"}

"ABABABBA"

Returns: 56448

四、源程序清单:

#include

#include

#include

using namespace std; //Required for TopCoder gcc compiler

class WordPath

{

typedef struct POINTtag{

int x;

int y;

int count;

}POS;

typedef vector VETPOS;

public:

int countPaths(vector grid, string find)

{

int findStrLen = find.length();

int gridSize = grid.size();

int gridStrLen = grid[0].length();

vector vec(findStrLen);

int i,j,k;

// 遍历grid中的每一个字符

for ( i = 0; i < gridSize; i ++)

{

for ( j= 0; j < gridStrLen; j++)

{

for ( k=0; k

{

char ch = find.at(k);

//如果与find中位置k的字符相等,则将相应的grid中的位置坐标保存到相应的向量中去

if ( ch == grid[i].at(j) )

{

POS ps;

ps.x =j;

ps.y = i;

//位置向量0中所有坐标的初始值为1,而其他位置向量中坐标的这个字段总会被指零后才计算

ps.count = 1;

vec[k].push_back(ps);

}

}

}

}

// 如果有find中的字符在grid中不存在则返回0

for ( k=0; k

{

if ( vec[k].size() == 0 )

return 0;

}

VETPOS midVes;//保存当前位置向量中符合条件点的临时向量

// 遍历从位置1开始的位置向量

for ( i = 1; i < findStrLen ; i ++)

{

midVes.clear();

//遍历当前位置向量中的所有位置坐标

for ( j=0; j < vec[i].size(); j++)

{

POS cur = vec[i][j];

//如果当前点与前个向量vec[i-1]中的点可以移动到达,则保存这个点到临时变量midVes中去

if ( pathCount(cur,vec[i-1]))

{

midVes.push_back(cur);

}

}

//清空原来的向量

vec[i].clear();

//如果midVes中有符合条件的点存在,则将它保存到原来的位置向量中去

//否则返回0

if ( midVes.size() >0 )

{

vec[i] = midVes;

}

else

{

return 0;

}

}

// 统计保存在最后位置向量中的点的count值

int count = 0;

for ( j=0; j < vec[findStrLen-1].size(); j++)

{

POS cur = vec[findStrLen-1][j];

count += cur.count;

if (count > 1000000000 )

return -1;

}

return count;

相关文档
最新文档