配列の要素の座標を記憶したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nogu
記事: 2
登録日時: 2年前
住所: 京都

配列の要素の座標を記憶したい

#1

投稿記事 by nogu » 2年前

二次元配列の要素を別の配列へ入れて処理を行ったのち、もともとあった二次元配列の場所へ新しく処理を行った要素を入れたいのですが、あまり適切に処理することができず、困っております。
例えば、i[25][25]という配列に要素が入っており、その要素を新しく作成した二次元配列n[25][25]に昇順になるように入れて、処理を行った後に元の配列i[25][25]の要素があった場所へ処理を行った要素を入れたいというのが大まかですがやりたいと思っていることです。
処理を行う要素の座標を記憶しておきたいのですがうまく考えることができません。
抽象的な質問で申し訳無いのですが、詳しい方宜しければ回答お願い致します。

akasann

Re: 配列の要素の座標を記憶したい

#2

投稿記事 by akasann » 2年前

意味があんまり理解できてませんが・・こういうことでしょうかね・・・。
3行3列で、数字入力すると小さいもの順に配列に入っていると思います。何か参考になるといいのですが・・。

コード:

#include<stdio.h>
#define N 3

int main(void){
	int a[N][N],n=0,i,j;
	int b[N*N],temp;

	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			scanf("%d",&a[i][j]);
			b[n]=a[i][j];
			n++;
		}
	}
	
	for(i=N*N;i>0;i--){
		for(j=0;j<i-1;j++){
			if(b[j]>b[j+1]){
				temp=b[j]; b[j]=b[j+1]; b[j+1]=temp;
			}
		}
	}

	n=0;
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			a[i][j]=b[n];
			n++;
		}
	}

	putchar('\n');
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			printf("%d ",a[i][j]);
		}
		putchar('\n');
	}
	return 0;
}

アバター
みけCAT
記事: 6186
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 配列の要素の座標を記憶したい

#3

投稿記事 by みけCAT » 2年前

やりたいことがよくわからないですが、要素の座標を記憶したければ要素の座標を記憶すればいいのではないでしょうか?

コード:

#define N 25
#define M 25

typedef struct {
    int value;
    int y, x;
} elem_t;

int main(void) {
    int i[N][M];
    elem_t n[N][M];
    int y, x;

    /* iの各要素を適当に初期化 */

    for (y = 0; y < N; y++) {
        for (x = 0; x < M; x++) {
            n[y][x].value = i[y][x];
            n[y][x].y = y;
            n[y][x].x = x;
        }
    }

    /* nやiを使ってやりたいことをやる */
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る