返回一个二维整数数组中最大联通子数组的和
2016-04-06 18:11
197 查看
1.设计思想
起初看到这个题目让我想到了去年暑假我们小学期的大作业:校园导航设计程序返回游览学校全部景点的最大路径,我把去年的程序翻出来认真的思考了一下,这道题也可以根据使用将矩阵转化为图的思路。将二维矩阵转换成图的存储形式,当两个相邻的数之间联通的时长度为1,否则就是0;每个点都遍历一遍,同一维数组一样当和小于0时重新计算,当和大于最大和时刷新最大值。选取已遍历的联通子数组周围最大值遍历。
2.源程序代码
3.运行结果截图
4.开发过程
最开始看到题目的时候我们是没有思路的,经过我们组的讨论和联想,我们想到了相似的问题:数据结构中求最优路径
我们拿出以前的编写过的程序做了一下比较发现思路可行
由于数据结构已经非常生疏了我们通过对原程序的修改找到感觉,最后重新编写出适合这个题目的程序
5.计划日志
6.时间记录日志
7.缺陷记录日志
组员:刘伟:http://www.cnblogs.com/Lw-1573/
附:
起初看到这个题目让我想到了去年暑假我们小学期的大作业:校园导航设计程序返回游览学校全部景点的最大路径,我把去年的程序翻出来认真的思考了一下,这道题也可以根据使用将矩阵转化为图的思路。将二维矩阵转换成图的存储形式,当两个相邻的数之间联通的时长度为1,否则就是0;每个点都遍历一遍,同一维数组一样当和小于0时重新计算,当和大于最大和时刷新最大值。选取已遍历的联通子数组周围最大值遍历。
2.源程序代码
#include<iostream> #include<fstream> using namespace std; typedef struct { int b[50]; int a[50][50]; int n; }G; void Traverse(G &p, int v, int visit[], int &b, int &max, int x) { visit[v]=1; max += p.b[v]; if (max>=b) { b=max; } int a=0, flag=0; for (int w=1; w<=p.n;w++) { for (int c=1;c<= p.n;c++) { if ((visit[w]==0)&&(p.a[c][w]==1)&&(visit[c]==1)) { a=w; flag=1; break; } } if (flag==1) { break; } } for (int w=1;w<=p.n;w++) { for (int c=1;c<=p.n;c++) { if ((visit[w] == 0) && (p.a[c][w] == 1) && (visit[c] == 1)) { if (p.b[a]<p.b[w]) a = w; } } } if (b+p.b[a]<0) { p.a[v][a] = 0; } else Traverse(p, a, visit, b, max, x); } int main() { int x, y; ifstream infile("input.txt"); infile>>x; infile>>y; G p; p.n = x*y; for (int i = 1; i <= p.n; i++) { infile>>p.b[i]; } for (int i=1;i<=p.n;i+= y) { for (int j=i;j<=i+y-2;j++) { p.a[j][j+1]=1; p.a[j+1][j]=1; } } for (int i=1+y;i<p.n;i+=y) { for (int j=i;j<=i+x - 1;j++) { p.a[j][j - y] = 1; p.a[j - y][j] = 1; } } int v=1, b[50] = {0}, h = 0; for (int i=1;i<=p.n;i++) { if (p.b[i]<0) { b[i] = p.b[i]; } else { int visit[50] = { 0 }; int max = 0; Traverse(p, i, visit, b[i], max, x); } } int max = b[1]; for (int i = 2; i <= p.n; i++) { if (b[i]>max) max = b[i]; } cout<<"二维整数数组中最大联通子数组的和为:" <<max<<endl; }
3.运行结果截图
4.开发过程
最开始看到题目的时候我们是没有思路的,经过我们组的讨论和联想,我们想到了相似的问题:数据结构中求最优路径
我们拿出以前的编写过的程序做了一下比较发现思路可行
由于数据结构已经非常生疏了我们通过对原程序的修改找到感觉,最后重新编写出适合这个题目的程序
5.计划日志
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 25 | 25 | 15 | 165 |
周二 | 30 | 35 | 25 | 90 | |
周三 | 60 | 15 | 35 | 110 | |
周四 | 100 | 30 | 30 | 25 | 185 |
周五 | 180 | 15 | 195 | ||
周六 | 60 | 15 | 75 | ||
周日 | 15 | 15 | |||
周总计 | 200 | 325 | 180 | 130 | 835 |
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/28 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
17:10 | 17:20 | 10 | 阅读书籍 | 《构建之法》 | ||
21:00 | 21:25 | 20 | 网上查找资料 | |||
3/29 | 14:00 | 15:00 | 10 | 110 | 结对编程 | 编写老师布置的作业 |
16:00 | 17:00 | 10 | 110 | 看书 | 《构建之法》 | |
3/30 | 21:00 | 21:30 | 30 | 结对编程 | 编写老师布置的作业 | |
3/31 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
4/3 | 16:00 | 18:00 | 120 | 结对编程 | 编写老师布置的作业 | |
4/4 | 9:00 | 9:30 | 30 | 看书 | 《人月神话》 | |
4/5 | 9:00 | 9:30 | 30 | 看书 | 《人月神话》 |
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月29日 | 1 | 编码 | 编码 | 0.2min | ||
编写子函数出现调用错误 | ||||||
2 | 编码 | 运行 | 3min | |||
文件输入输出流运用错误 | ||||||
4月3日 | 3 | 编码 | 编译 | 20min | ||
程序逻辑错误 |
附:
相关文章推荐
- JAVA日志
- HDU 3836 强联通分量
- ns2.35下gpsr协议移植
- 策略模式
- 将studio中的library引进eclipse里
- android greenDao SQLite数据库操作工具类使用
- SQLServer设置大小写敏感
- 需求用例分析之三:补充规约
- 关键路径算法
- LayoutInflater两个inflate方法的区别
- 笔试练习三
- java.io.FileNotFoundException: URL [jndi:/localhost/myBlogSys/WEB-INF/classes/] cannot be resolved t
- mongoDB window平台安装MongoDB
- VI nagios
- [MUI框架]-滑动侧边栏-webview模式
- TextView+ScrollView显示大量文本(小说)
- 基于Http协议的Android网络编程
- OPRNGL之渲染过程大概梳理
- php 使用GD库压缩图片,添加文字图片水印
- 串口初始化