|
楼主 |
发表于 2007-4-29 23:23:48
|
显示全部楼层
你在马路边,捡到了一分钱,找不到警察叔叔就把它放到了你的口袋里边!
下次努力哦!…… 原帖由 众香之主 于 2007-4-29 18:38 发表
用位移不是更好吗?、。
本来就是位移啊,但是你要有个算法,让无论什么情况下都能转换带状矩阵,并且你要找到那个带宽的规律,不能乱给空间:lol
- double** bda = new double*[n]; //在堆中分配了n行,行数要和A一样
- for(int i=0;i<n;i++) //为行分配空间
- {
- bda = new double[p+r+1]; //每行需分配p+r+1的空间,这里的p是左带宽,r是右带宽
- bda += p; //每行偏移
- }
- for(int i=0;i<n;i++)
- {
- int ip =max(i-p,0); //max()和min()函数在<algorithm>里,不想用的话也可以自己写
- int ir =min(i+r,n-1);
- for(int j =ip;j<=ir;j++) //确保赋的值都在A的主对角线和3条次对角线中
- bda[j-i]=A[j];
- }
- for(int i=0;i<n;i++)
- {
- bda -=p;
- delete[] bda; //释放每行
- }
- delete[] bda; //释放双重指针
复制代码
[ 本帖最后由 zkkpkk 于 2007-4-30 10:23 编辑 ] |
|