C++メモリは問題の要求を超えて、どのように解決しますか?

10521 ワード

トピックは、m x nのマトリクスを指定し、1つの要素が0の場合、その行と列のすべての要素を0に設定します.その場アルゴリズムを使用してください.その場アルゴリズムとは、この問題を解決するために追加のメモリを使用することはできません.また、マトリクスの数字は任意の値である可能性があります.したがって、0を表すために別の数字を使用することはできません.ここでは、行列をスキャンして、行を処理し、各行のすべての0を大きな数字Xに変更します.例えば、19270817で、この行の他の0以外の数を0に変更してから、列ごとにスキャンします.この列があれば、この列のすべての数を0に変更します.このような問題は,X自体がこの行列に現れる可能性があることである.だから、この問題を解決するために別の方法を考えなければなりません.私が書いたc++プログラムは以下の通りです.
#include
using namespace std;
bool excute(int &i,int &j,int** a,int &m,int &n);
int main(){
int m,n;
cin>>m>>n;
int *a[m];
for(int i=0;i<n;i++)
a[i]=new int [n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
	for(int i=0;i<m;i++)
	for(int j=0;j<n;j++)
	if(j!=n-1&&excute(i,j,a,m,n)==true)
	cout<<a[i][j]<<" ";
	else if(j==n-1&&excute(i,j,a,m,n)==true)
    cout<<a[i][j]<<endl;
	else if(j!=n-1)
	cout<<0<<" ";
	else
	cout<<0<<endl;
bool excute(int &i,int &j,int** a,int &m,int &n){
	int s=0;
	for(int u=0;u<m;u++)
	if(a[u][j]==0)
	s++;
	for(int p=0;p<n;p++)
	if(a[i][p]==0)
	s++;
	if(s==0)
	return true;
	else 
	return false;
}

最後の決済時にメモリが要求188 kを超えたので、いくら修正しても無駄です.