12 楼
rickone [专家分:15390] 发布于 2006-09-23 22:41:00
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
typedef unsigned long U32;
typedef struct _snode {
U32 key;
float g,f;
}snode;
#define MAX_OPEN 0x3FFFF
#define MAX_CLOSE 0xFFFFF
snode OPEN[2][MAX_OPEN+1];
int tail[2];
int CLOSE[MAX_CLOSE+1];
int length;
int numof1;
U32 board[20][20]={
0,0x3,0x7,0xF,0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF,0x1FFF,0x3FFF,0x7FFF,0xFFFF,0x1FFFF,0x3FFFF,0x7FFFF,0xFFFFF,
0,0,0x6,0xE,0x1E,0x3E,0x7E,0xFE,0x1FE,0x3FE,0x7FE,0xFFE,0x1FFE,0x3FFE,0x7FFE,0xFFFE,0x1FFFE,0x3FFFE,0x7FFFE,0xFFFFE,
0,0,0,0xC,0x1C,0x3C,0x7C,0xFC,0x1FC,0x3FC,0x7FC,0xFFC,0x1FFC,0x3FFC,0x7FFC,0xFFFC,0x1FFFC,0x3FFFC,0x7FFFC,0xFFFFC,
0,0,0,0,0x18,0x38,0x78,0xF8,0x1F8,0x3F8,0x7F8,0xFF8,0x1FF8,0x3FF8,0x7FF8,0xFFF8,0x1FFF8,0x3FFF8,0x7FFF8,0xFFFF8,
0,0,0,0,0,0x30,0x70,0xF0,0x1F0,0x3F0,0x7F0,0xFF0,0x1FF0,0x3FF0,0x7FF0,0xFFF0,0x1FFF0,0x3FFF0,0x7FFF0,0xFFFF0,
0,0,0,0,0,0,0x60,0xE0,0x1E0,0x3E0,0x7E0,0xFE0,0x1FE0,0x3FE0,0x7FE0,0xFFE0,0x1FFE0,0x3FFE0,0x7FFE0,0xFFFE0,
0,0,0,0,0,0,0,0xC0,0x1C0,0x3C0,0x7C0,0xFC0,0x1FC0,0x3FC0,0x7FC0,0xFFC0,0x1FFC0,0x3FFC0,0x7FFC0,0xFFFC0,
0,0,0,0,0,0,0,0,0x180,0x380,0x780,0xF80,0x1F80,0x3F80,0x7F80,0xFF80,0x1FF80,0x3FF80,0x7FF80,0xFFF80,
0,0,0,0,0,0,0,0,0,0x300,0x700,0xF00,0x1F00,0x3F00,0x7F00,0xFF00,0x1FF00,0x3FF00,0x7FF00,0xFFF00,
0,0,0,0,0,0,0,0,0,0,0x600,0xE00,0x1E00,0x3E00,0x7E00,0xFE00,0x1FE00,0x3FE00,0x7FE00,0xFFE00,
0,0,0,0,0,0,0,0,0,0,0,0xC00,0x1C00,0x3C00,0x7C00,0xFC00,0x1FC00,0x3FC00,0x7FC00,0xFFC00,
0,0,0,0,0,0,0,0,0,0,0,0,0x1800,0x3800,0x7800,0xF800,0x1F800,0x3F800,0x7F800,0xFF800,
0,0,0,0,0,0,0,0,0,0,0,0,0,0x3000,0x7000,0xF000,0x1F000,0x3F000,0x7F000,0xFF000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x6000,0xE000,0x1E000,0x3E000,0x7E000,0xFE000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xC000,0x1C000,0x3C000,0x7C000,0xFC000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x18000,0x38000,0x78000,0xF8000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x30000,0x70000,0xF0000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x60000,0xE0000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xC0000,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//像不像一把刀?^o^
};
U32 Bit32[32]={
0x1,0x2,0x4,0x8,
0x10,0x20,0x40,0x80,
0x100,0x200,0x400,0x800,
0x1000,0x2000,0x4000,0x8000,
0x10000,0x20000,0x40000,0x80000,
0x100000,0x200000,0x400000,0x800000,
0x1000000,0x2000000,0x4000000,0x8000000,
0x10000000,0x20000000,0x40000000,0x80000000
};
int Get01String(FILE *fin,U32 &str)
{
char c;
int count=0,num=0;
str=0x0;
while(1)
{
c=getc(fin);
if(c==EOF)
return 0;
if(c!='\n')
{
str=str<<1;
if(c=='1')
{
str=str | 0x1;
++num;
}
++count;
break;
}
}
while(1)
{
c=getc(fin);
if(c==EOF)
return 0;
if(c=='\n')
break;
str=str<<1;
if(c=='1')
{
str=str | 0x1;
++num;
}
++count;
}
if(num>(count/2))
{
str=str ^ ((0x1 << count) - 0x1);
numof1=count-num;
}
else
{
numof1=num;
}
return length=count;
}
void PrintU32(U32 n)
{
while(n)
{
if(n & 0x80000000)
printf("1");
else
printf("0");
n=n << 1;
}
printf("\n");
}
inline void GetCArr(const snode &s,int *goal)
{
int i,j,t1=0,t2=0;
for(i=0;i<length;++i)
{
if(s.key & Bit32[i])
{
if(t1==0)//first time got 1
{
goal[t2]=1;
t1=1;
}
else
{
goal[t2]++;
}
}
else
{
if(t1==1)//first time got 0
{
//printf("%d,",goal[t2]);
t2++;
}
t1=0;
}
}
//printf("\n");
//sort
for(i=0;i<10;++i)
{
for(j=i+1;j<10;++j)
{
if(goal[i]<goal[j])
{
int tmp=goal[i];
goal[i]=goal[j];
goal[j]=tmp;
}
}
}
}