- 825 名前:815 すこしなおした バグ取るか、参考として利用してくれ [2007/11/03(土) 15:04:39 ]
- #include <iostream>
#define TEN 20 using namespace std; main(){ int N=TEN*TEN,n,a,b,c;unsigned int A[TEN*TEN/32+1]; //経路生成 for(n=0;n<=N/32;n++)A[n]=0; for(n=0;n<100;n++){ a=rand()%TEN;b=rand()%TEN; if(a<b){c=a+TEN*b; A[c/32] |= 1<<(c%32);}} //経路総数 int keirosu=0;for(n=0;n<N;n++)if( (A[n/32]>>(n%32))&1 )keirosu++; int *y=new int [keirosu+2], z[TEN], d=0,x,s=keirosu;; for(n=0;n<TEN;n++)z[n]=-1;for(n=0;n<keirosu+2;n++)y[n]=0; for(x=0;x<TEN;x++){ z[0]=x; while(1){ n=y[d]; if(n>=N){ if(d==0)break; z[d]=-1;d--;x=z[d]; A[n/32]|=1<<(n%32); s++;y[d]++;continue;} if( (A[n/32]>>(n%32))&1 ){ a=n%TEN; b=n/TEN; if(a==x){s--;if(s==0)goto end; x=b; d++; y[d]=0;z[d]=x; A[n/32]&=~(1<<(n%32));continue;} if(b==x){s--;if(s==0)goto end; x=a; d++; y[d]=0;z[d]=x; A[n/32]&=~(1<<(n%32));continue;}} y[d]++;}} end:for(n=0;n<keirosu;n++)cout<<z[n]<<"→";}
|

|