C/C++の宿題を片付けます 99代目 at TECH
[2ch|▼Menu]
482:デフォルトの名無しさん
07/11/14 14:31:30
>>467 数独はアルゴリズムは簡単で良いけど、ハッシュ表は導入した方が良いよ ちょっとやってみた

#include <iostream>
using namespace std;
main(){
int z,w,l=0,n,i,j,bf[8][81];
int tmp[4][3]={0,1,9, 0,9,1, 8,-1,9, 8,9,-1};
for(n=0;n<4;n++){
for(i=0;i<9;i++)for(j=0;j<9;j++){
z=tmp[n][0]+tmp[n][1]*i+tmp[n][2]*j;
bf[l][z]=bf[l+1][80-z]=i+9*j;}l+=2;}

int x[81],p[81],q[81];for(z=0;z<81;z++)x[z]=rand()%10;
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<x[z]<<" ";}
cout<<endl<<"のハッシュ値を求める。"<<endl;

int num[10];
for(i=0;i<81;i++)p[i]=9;
for(l=0;l<8;l++){
for(i=0;i<10;i++)num[i]=0;i=1;
for(z=0;z<81;z++){ n=x[ bf[l][z] ];
if(n>0)if(num[n]==0){num[n]=i;i++;}
q[z]=num[n];}
for(i=0;i<81;i++)if(p[i]<q[i])goto end; else if(p[i]>q[i])break;
if(i<81)for(i=0;i<81;i++)p[i]=q[i];end:}

unsigned int rh[81][9],hash=0;
for(z=0;z<81;z++)for(i=0;i<9;i++)rh[z][i]=(rand()<<16)+rand();
for(z=0;z<81;z++)hash^=rh[z][p[z]];
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<p[z]<<" ";}
cout<<"\nと変形され\nハッシュ値は"<<hash<<endl;}


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4719日前に更新/222 KB
担当:undef