求C++算法,从一个二维矩阵中除去第n行第n行的算法

用图说话吧:

原始状态(数据没有关系,这个只是随便取的):

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

之后比如要删除第三行第三列:

1 2 ■ 4 5
2 3 ■ 5 6
■ ■ ■ ■ ■
4 5 ■ 7 8
5 6 ■ 8 9

然后还不行,还得重新调整(这个过程是把被删除的地方用后面的重新赋值):

1 2 4 5
2 3 5 6
4 5 7 8
5 6 8 9

比如第一行,算法应该为
arr[0][2]=arr[0][3];
arr[0][3]=arr[0][4];

求解,求教!!

给你个函数吧:
void f(int *a, int N, int n)
{
int i,j;
for(i=0; i<N; i++)
for(j=n-1; j<N-1; j++)
*(a+i*N+j) = *(a+i*N+j+1);

for(i=n-1; i<N-1; i++)
for(j=0; j<N; j++)
*(a+i*N+j) = *(a+(i+1)*N+j);

}
调用方法:

int x[100][100];
删除第5行第5列
f(&x[0][0], 100, 5);

参考一下。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-20
#include <iostream>
using namespace std;
int main()
{
int row1,row2,a[10][10]={0},r,s,R1,R2;
cout << "请输入行数:\n";
cin >> row1;
cout << "请输入列数:\n";
cin >> row2;
cout << "请输入整个数组:\n";
for(r=0;r<row1;r++)
{
for(s=0;s<row2;s++)
{
cin >> a[r][s];
}
}
cout << "请输入你想删除的行数和列数:\n";
cin >> R1 >> R2;
for(r=R1;r<row1;r++)
{
for(s=0;s<row2;s++)
{
a[r-1][s]=a[r][s];
}
}
for(s=R2;s<row2;s++)
{
for(r=0;r<row1;r++)
{
a[r][s-1]=a[r][s];
}
}
cout << "您得到的新的数组为:\n";
for(r=0;r<row1-1;r++)
{
for(s=0;s<row2-1;s++)
{
cout << a[r][s] << ' ';
}
cout << '\n';
}
return 0;
}

求C++算法,从一个二维矩阵中除去第n行第n行的算法
(a+i*N+j) = *(a+i*N+j+1);for(i=n-1; i<N-1; i++)for(j=0; j<N; j++)(a+i*N+j) = *(a+(i+1)*N+j);} 调用方法:设 int x[100][100];删除第5行第5列 f(&x[0][0], 100, 5);参考一下。

如何实现用c语言或c++来编写矩阵2范数的算法,矩阵为n阶的
写一个矩阵,n阶矩阵就是n是变量,等待输入,矩阵的话最简单的就是用一个固定长度的二维数组来存。然后根据公式分别写对应的函数再调用不就行了。

C++棋盘棋盘是指一个行和列编号从1~N的NxN的二进制矩
采用状态压缩的办法,因为用搜索的办法,直接用32位的整数int进行压缩。如果这个int的二进制位是1,就表示该位是在某个皇后的攻击范围,不能放只皇后,0表示可以放置。因为一行最多摆放1个皇后,所以从行开始搜索。对于一个n*m的棋盘,共有矩形 (m+m-1+m-2+1)*(n+n-1+n-2+1)即[m*(m+...

用c++求一个二维矩阵的最大值和最小值
using namespace std;const int m=3;const int n=3;int main(){ int max=0,min=1000000;int s[m][n];cout<<"input the data:"<<endl;for(int i=0;i<m;i++)for(int j=0;j<n;j++)cin>>s[i][j];for( i=0;i<m;i++){ for(int j=0;j<n;j++){ cout<<s[i][j...

c++ 二维向量的乘法运算定义
左矩阵的列数应该等于右矩阵的行数,这样的两个矩阵才能相乘 一个M行N列的矩阵与一个N行T列的矩阵相乘后得到一个M行T列的矩阵 C语言我搞不懂,就没办法写程序给你了

c++编写一个程序实现矩阵的倒序输出
矩阵在C语言中就是一个二维数组.写起来也不难的. 但是基本的输入参数你要知道.1.要能够接受输入的矩阵(二维数组)的指针 2.要能够知道是一个几乘几(M*N)的矩阵 如下用C语言写的,放到C++也一样用 include <stdio.h> include "stdafx.h"define ROW 4 define COLUMN 3 int Array[ROW][COLUMN]...

C++(.有一个矩阵,编程求其中值最大的那个元素的值,以及其所在的行号和列...
你用一个二元数组a[i][j]来存储你这个矩阵,i和j的值,根据矩阵的行数和列数进行选择。再将每一行,每一列的值存入这个二元数组。例如第一行第一列和值为5,即a[0][0]=5.然后定义一个变量x,将a[0][0],即矩阵的第一值的数值赋给它。最后做一个for的二次循环,依次拿矩阵的每个值和...

用C++语言编写:输入一个2维矩阵,输出这个矩阵的转置矩阵
cout<<"行数:"<<endl;cin>>m;cout<<"列数:"<<endl;cin>>n;cout<<"请输入矩阵的元素"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){ cin>>data[i][j];} cout<<"你输入的矩阵为:"<<endl;for(i=0;i<m;i++){ for(j=0;j<n;j++){ cout<<data[i][j]<<' ';...

一个写好的矩阵我想利用一个C++程序使这个矩阵能把第二行的数赋值给第...
int matrix[N][M]; \/\/自己初始化 int A[M] = {0};int B[M] = {0} \/\/获取矩阵第二行 和倒数第二行数据 for (int i = 0; i < N; i++) { if (1 == i) { for (int j = 0; j < M; j++) { A[j] = matrix[i][j]} } if (i == (N - 2)) { for (...

C\/C++,求矩阵中相同的行
include <stdio.h>int main(){int i,j,n,k=0,m=1,num=0;char s[80]={'\\0'};gets(s);for(i=0;s[i]!='\\0';i++){if(s[i]!=','&&s[i]!=';') k++;if(s[i]==';') m++;}k\/=m;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++)for(n=0;n<k*2-1;n++)...

相似回答
大家正在搜