|
回复 2楼 的帖子
哈哈,老大也搞错了吧,不是简单的排序.
这个数值是不是都是单值的哦?否则更麻烦.
想不到很好方法,直接按描述写估计也不是很烦吧?
另外,是不是可以建立一个n*4维新矩阵,每个行向量为[a,b,c,d],分别代表原矩阵位置中的左上右下四个元素.基本思想就是每得到一个大数,就把这个十字行的去覆盖.以上例,
[1 2 3
6 9 7
4 8 5]
产生的新矩阵a=
[0 0 2 6
1 0 3 9
2 0 0 7
0 1 9 4
6 2 7 8
9 3 0 5
0 6 8 0
4 9 5 0
8 7 0 0]
第一步,判断整个原始数组最大,值为9,序号为5;
第二步,判断a(5,:)中最大,值为8,这个"序号"为4;根据这个序号生成8在整个原数组中的序号,这个根据上下左右的关系和9的序号之间的关系很容易得到的,这里为5+3=8;
第三步,判断[a(5,:), a(8,:)] 中去掉前面已经得到的值,这步算法也很简单,find =9和8的序号,令为0就好了.(这里如果数据有重复的话可能会有问题,还要多加几步来判断有没有误赋值.挺复杂的,就是前面已经找到x个,而find找到了比x更多的值.两种情况,一种是由于产生的新数组中本来有交叉,属于正常.另外一种是还有些没考虑过的也被删了.这点还没想到很好方法.)然后再得到这里的最大值以及序号.这个序号要好好思考一下;
重复第三步,每次都多加一个4值向量,一直到循环结束.
不知道这样在写程序上能不能稍微简化点,循环个数还是有好几个...
[ 本帖最后由 wwbeyondww 于 2008-4-17 11:32 编辑 ] |
评分
-
1
查看全部评分
-
|