#include<stdio.h>
#define N 3
int p[N+1];
int g=0;
int a[6][6];
void perm(int);
int i;
void main(void){
int y,z;
for(i=1;i<=N;i++)
p=i;
perm(1);
for(y=0;y<=5;y++){
for(z=0;z<=5;z++){
printf("%d",a[y][z]);
}
printf("\n");
}
int g,j;
int b[N];
int hp0[N][2],hp1[N][2],hp2[N][2];
for(g=0;g<=N-1;g++){ //0列目(全hp共通)
hp0[g][0]=2*g;
hp1[g][0]=2*g;
hp2[g][0]=2*g;
}
for(g=0;g<=N-1;g++){ //1列目(hp0)
b[g]=(4*N+1-2*g)%(2*N);
hp0[g][1]=b[g];
}
for(g=0;g<=N-1;g++){ //1列目(hp1)
hp1[g][1]=(hp0[g][1]+2)%(2*N);
}
for(g=0;g<=N-1;g++){ //1列目(hp2)
hp2[g][1]=(hp1[g][1]+2)%(2*N);
}
printf("[hp0]\n");
for(i=0;i<=N-1;i++){
for(j=0;j<=1;j++){
printf("%d ",hp0[j]);
}
printf("\n");
}
printf("\n");
printf("[hp1]\n");
for(i=0;i<=N-1;i++){
for(j=0;j<=1;j++){
printf("%d ",hp1[j]);
}
printf("\n");
}
printf("\n");
printf("[hp2]\n");
for(i=0;i<=N-1;i++){
for(j=0;j<=1;j++){
printf("%d ",hp2[j]);
}
printf("\n");
}
printf("\n");
}
void perm(int i){
int j,k,t;
if(i<N){
for(j=i;j<=N;j++){
t=p[j];
for(k=j;k>i;k--)
p[k]=p[k-1];
p=t;
perm(i+1);
for(k=i;k<j;k++)
p[k]=p[k+1];
p[j]=t;
}
}
else{
for(j=1;j<=N;j++){
a[g][2*j-2]=2*j-2;
a[g][2*j-1]=2*p[j]-1;
printf("%d-%d ",2*j-2,2*p[j]-1);
}
g++;
printf("\n");
}
}
結果は↓のような感じで表示されると思いますが
012345
012543
:
052341
[hp0]
01
25
43
[hp1]
03
21
45
[hp2]
05
23
41
配列a[/url][/url]の各行の要素を前から2つずつ区切って、2つをセットで辺として考えます。
i行目{a[0]-a[1] , a[2]-a[3] , a[4]-a[i][5]}
このとき各[hp0][hp1][hp2]に共通の辺を持っている行だけ抜き出したいのですがどうすればよいでしょうか?
例えば
0行目は012345なので{0-1,2-3,4-5}と考えます。
(0-1)は[hp0]に存在し、(2-3)は[hp2]に存在し、(4-5)は[hp1]に存在するので0行目は採択します。
1行目は012543なので{0-1,2-5,4-3}とします。
(0-1)は[hp0]に存在しますが、(2-5)と(4-3)は存在しないので1行目は棄却します。
このようにすべての行を調べて、各[hp0][hp1][hp2]に1本ずつ共通の辺を持っている行だけを
抜き出したいと思ってます。もっと大規模なものを考えていますので、まずは今回のような小規模のものから
考えようと思ってます。
配列関係
Re:配列関係
簡単に言えばint a[6][6]において
i行目(i=0~5)を{a[0]-a[1] , a[2]-a[3] , a[4]-a[5]}としたとき
例えば
a[0]a[1]=hp0[x][0]hp0[x][1]
a[2]a[3]=hp1[y][0]hp1[y][1]
a[i][4]a[i][5]=hp2[z][0]hp2[z][1]
となればi行目を残したいです。hpの添え字は一回ずつ使えば順番は気にしません。
a[i][0]a[i][1]=hp2[x][0]hp2[x][1]
a[i][2]a[i][3]=hp0[y][0]hp0[y][1]
a[i][4]a[i][5]=hp1[z][0]hp1[z][1]
でも構いません。
i行目(i=0~5)を{a[0]-a[1] , a[2]-a[3] , a[4]-a[5]}としたとき
例えば
a[0]a[1]=hp0[x][0]hp0[x][1]
a[2]a[3]=hp1[y][0]hp1[y][1]
a[i][4]a[i][5]=hp2[z][0]hp2[z][1]
となればi行目を残したいです。hpの添え字は一回ずつ使えば順番は気にしません。
a[i][0]a[i][1]=hp2[x][0]hp2[x][1]
a[i][2]a[i][3]=hp0[y][0]hp0[y][1]
a[i][4]a[i][5]=hp1[z][0]hp1[z][1]
でも構いません。
Re:配列関係
誰からのRESもありませんね。気の毒なので、RESがない理由
1
1
が使ってない。読みたくないよね。こんなプログラム。 2 再帰呼び出しを使える人がなんでこんなプログラムを書くのだろう、または なんでこんな質問をという疑問がある。 3 力ずくでプログラムをすれば済みそうだけど、条件があいまい。 さて、この条件という話。 なんの、プログラムか検討がつかないので 実行結果の 最初の012345って何よ?この数字は頂点の番号?じゃ、六角形?ダビデの星? 例えば 0-1と1-0は同じとして扱うの?違うものなの? >共通の辺を持っている行だけ抜き出したい 抜き出すってどこに?printfすればいいの? >存在しないので1行目は棄却します どこに捨てちゃうの? と、もろもろ・・・・・わからないし、面倒だし、答える気にならない。