您的位置:首页 > 其它

【现代程序设计】【homework-03】【11061027】

2013-10-11 14:18 537 查看
Q:你现在使用的代码规范是什么, 和上课前有什么改进?

A: 代码规范........自定义的代码规范算 代码规范吗。。。。。

Q:你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)

A:

Q:你的代码从 作业2 到 作业3 经历了哪些变化? 哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写, 为什么?

A:因为作业2是用c写的,作业3用c#(wpf)写的,我打算做一个界面交互,而非命令行的maxsum,所以作业3的代码是基本上都是重写的

Q:你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的?

A:由于做的是界面操作的应用,命令行显的不实用和麻烦,所以我没加入命令行这个功能,也就不存在【不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的】的问题

Personal Software Process Stages

时间百分比(%)

实际花费的时间 (分钟)

原来估计的时间 (分钟)

计划

· 估计这个任务需要多少时间,把工作细化并大致排序

000
开发

· 需求分析 (包括学习新技术)

203h1h
· 生成设计文档

000
· 设计复审 (和同事审核设计文档)

000
· 代码规范 (制定合适的规范)

000
· 具体设计

153h2h
· 具体编码

203h6h
· 代码复审

102h2h
· 测试(自我测试,修改代码,提交修改)

357h4h
总结报告

Total总计100%总用时 18h总估计的用 15h
总结:

因为对WPF不太熟悉,所以这次作业很多的时间花在了学习wpf上

一开始挑选显示二维数组的Xaml控件,google了半天,感觉好像是 DataGrid更方便一点。

然后就用datagrid显示二维数组

单独改变DataGrid的某个cell的背景色不会,Google了好一会

然后因为这个DataDrid的行列都是动态确定的,数据绑定又Google了好一会.....

在花了不少的时间搞定UI这一块之后 ,很快搞定了【子矩阵的问题】和【连通子图】

运行的时候发现,由于上次作业【连通子图】写的太懒,就一个递归,什么剪枝都没有 ,于是代码的时间效率实在是 渣

又重新写了一个【连通子图】的类,并重做了优化,这点又花了很长时间

虽然时间效率还是很渣,但是勉强还是解出来

最后就是烦人的测试,Debug...文件输入的Debug,AnyMaxsum的Debug,Maxsum的Debug,UI显示的Debug。。。

然后现在总算是完成了

下面是anymaxsum的c#代码

通过 GetResultData()获取 数据

namespace maxsum
{
class AnyMaxsum
{
bool[,] gTemp,gResult;
bool isvselect=false, ishselect=false;
int sumall=0,n,m,cpuload,amax;
public int sum=-10000, nsum = 0;

int[,] a, asum, gmain;
int[] dx={-1,0,1,0},dy={0,-1,0,1};

void init()
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
{
gTemp[i, j] = gResult[i, j] = false;
gmain[i, j] = 0;
}

}

public AnyMaxsum(int Arrm,int Arrn,int[,] ArrSource)
{
n = Arrn;
m = Arrm;
a = new int[m, n];
asum = new int[m, n];

gTemp = new bool[m, n];
gmain = new int[m, n];
gResult = new bool[m, n];

a = ArrSource;
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
{
if (a[i, j] > 0) sumall += a[i, j];
asum[i, j] = sumall;
if (amax < a[i, j]) amax = a[i, j];
}

}

public void setvh(bool v,bool h)
{
isvselect = v;
ishselect = h;
}

public void GetResultData(ref int s,ref bool[,] aresult)
{
init();
if (sumall <= 0)
{
int x = 0, y = 0, z = -1234567891;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) if (z < a[i, j])
{
z = a[i, j];
x = i;
y = j;
}
s = z;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) aresult[i, j] = false;
aresult[x, y] = true;
return;
}

fany(0, -1, 0);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) aresult[i, j] = gResult[i, j];
s = sum;
}
public int GetCpuLoad()
{
return cpuload;
}

bool isinvh(int x,int y)
{
if (x >= 0 && x < m && y >= 0 && y < n)
return true;
return false;
}

void ff(int x, int y)
{
int tx, ty, i;

gTemp[x, y] = true;

for (i = 0; i < 4; i++)
{
tx = x + dx[i];
ty = y + dy[i];

if (isvselect)
{
if (tx == m) tx = 0;
if (tx == -1) tx = m - 1;
}

if (ishselect)
{
if (ty == n) ty = 0;
if (ty == -1) ty = n - 1;
}

if (isinvh(tx, ty) && !gTemp[tx,ty] && gmain[tx,ty]<2)
ff(tx, ty);
}
}

void fany(int x, int y, int z)
{
int tx, ty, tt, i, j;

cpuload++;

for (i = 0; i <= x; i++)
for (j = 0; j < n; j++)
if (gmain[i, j] == 1)
{
tx = i; ty = j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++) gTemp[i, j] = false;
ff(tx, ty);
for (i = 0; i <= x; i++)
for (j = 0; j < n; j++) if (!gTemp[i, j] && gmain[i, j] == 1) return;
i = x + 1;
break;
}

if (x == m - 1 && y == n - 1)
{

if (sum > z) return;

tt = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++) if (gmain[i, j] == 1)
tt++;

if (sum == z && tt > nsum) return;

for (i = 0; i < m; i++)
for (j = 0; j < n; j++) if (gmain[i, j] == 1)
gResult[i, j] = true;
else gResult[i, j] = false;

sum = z;
nsum = tt;
return;
}

ty = (y + 1) % n;
tx = x + (y + 1) / n;

tt = sumall - asum[tx, ty] + z;

if (tt + a[tx, ty] >= sum)
{
gmain[tx, ty] = 1;
fany(tx, ty, z + a[tx, ty]);
gmain[tx, ty] = 0;
}
if (tt >= sum)
{
gmain[tx, ty] = 2;
fany(tx, ty, z);
gmain[tx, ty] = 0;
}
}

}
}


下面是工程文件和截图和测试数据:

测试数据:我一共写了14组测试数据,加上xinz老师的4组,18组测试数据

http://files.cnblogs.com/lightz/MaxsumTestData.zip

VS2012_工程文件:maxsum软件 包含在文件的bin\Release 目录下

http://files.cnblogs.com/lightz/Maxsum_VS2012.zip

截图:

http://files.cnblogs.com/lightz/Maxsum%E6%88%AA%E5%9B%BE.zip

这里随便贴了几张,如下:











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: