From c38a38d0d4616e673fc0d0043eeea91d7ee6095e Mon Sep 17 00:00:00 2001 From: royus Date: Thu, 25 Jul 2019 14:12:38 +0900 Subject: [PATCH] solve 2, 3, (6), 7 --- .gitignore | 8 - main | Bin 20236 -> 26956 bytes main.dSYM/Contents/Resources/DWARF/main | Bin 17831 -> 18512 bytes router/Makefile | 0 router/ap_int.h | 0 router/etc/ap_fixed_sim.h | 0 router/etc/ap_int_sim.h | 0 router/etc/ap_private.h | 0 solver.c | 417 +++++++++++++++++++----- 9 files changed, 330 insertions(+), 95 deletions(-) delete mode 100644 .gitignore mode change 100755 => 100644 router/Makefile mode change 100755 => 100644 router/ap_int.h mode change 100755 => 100644 router/etc/ap_fixed_sim.h mode change 100755 => 100644 router/etc/ap_int_sim.h mode change 100755 => 100644 router/etc/ap_private.h diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b9ace87..0000000 --- a/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Ignore ctags -tags -tags.lock - -# Ignore binaries -.x_* -*.gch -*.out diff --git a/main b/main index 67aa4ccdaf209575a449595dc19fbd81593764bc..f2575dc283c9b9a9f662703d121d36e87cd618c4 100755 GIT binary patch literal 26956 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 diff --git a/main.dSYM/Contents/Resources/DWARF/main b/main.dSYM/Contents/Resources/DWARF/main index 2ce32e73f4be60b8e4cb499a93e09eeba7ab9fbb..6b46e0d1f86d7739777c7754adb13685ce867e9a 100644 GIT binary patch delta 6079 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%0AVWGA7YO34{DbR7+ah&8Dq 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 KZ&&`<4CQ~6z`?fw diff --git a/router/Makefile b/router/Makefile old mode 100755 new mode 100644 diff --git a/router/ap_int.h b/router/ap_int.h old mode 100755 new mode 100644 diff --git a/router/etc/ap_fixed_sim.h b/router/etc/ap_fixed_sim.h old mode 100755 new mode 100644 diff --git a/router/etc/ap_int_sim.h b/router/etc/ap_int_sim.h old mode 100755 new mode 100644 diff --git a/router/etc/ap_private.h b/router/etc/ap_private.h old mode 100755 new mode 100644 diff --git a/solver.c b/solver.c index ff92493..e3b4893 100644 --- a/solver.c +++ b/solver.c @@ -1,16 +1,17 @@ /* solver.c */ -/* Last Change: 2019/07/23 (Tue) 17:13:18. */ +/* Last Change: 2019/07/25 (Thu) 14:03:43. */ #include #include +#include +#include #include"solver.h" #include"io.h" -/* #include */ /* #include */ /* #include */ -/* #include */ -#define DEBUG 0 -#define abs(a) ((a) < 0 ? - (a) : (a)) +#define DEBUG 1 +#define ABS(a) ((a) < 0 ? - (a) : (a)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) /* short int connected[MAXLINE+1]={0}; //if line connected:2, if one end:1, otherwize:0 */ short int board_beta[MAXSIZE][MAXSIZE]; //big board data @@ -20,13 +21,30 @@ short int point[MAXBLOCK+1]; //XYZ //X: search priority, Y: number of edges in board, Z: number of edges in block short int first_block=1; short int costrank[1+MAXBLOCK*MAXBLOCK][2]; //ranking of cost: block being in (costrank[ranking][0],costrank[ranking][0]) +short int rdm[MAXBLOCK+1]; //random no +short int attempts=1; void print_board_beta(void){ short int i,j; + short int minw=MAXSIZE-1,maxw=0,minh=MAXSIZE-1,maxh=0; for(i=0;imaxw) + maxw=i; + if(imaxh) + maxh=j; + if(jj) - rank[i]++; + blocksrank[i]=1; } - if(DEBUG){ - for(i=1;i<=blocks;i++){ - printf("%d ",rank[i]); + for(i=1;i<=blocks;i++){ + for(j=1;j<=blocks;j++){ + if(point[rdm[i]]j) + blocksrank[rdm[i]]++; + /* else */ + /* printf("%d %d no\n",rdm[i],rdm[j]); */ } - printf("\n"); } + for(i=1;i<=blocks;i++) + rank[blocksrank[i]]=i; return; } void reset(void){ //excluding init_points short int i,j; - for(i=0;i0) //if edge exists - point[i]++; + point[i]+=2; + if(point[i]==0) + point[i]++; } update_ranks(); return; } -void add_point(short int blockid,short int lineid){ //use only once - short int i,j; +void add_point(short int blockid){ + short int i,j,k; for(i=1;i<=blocks;i++) - if(i!=blockid) + if(i!=blockid&&point[i]>0) for(j=1;j<=4;j++) - if(block_data[i][j][2]==lineid) //if edge exists - point[i]+=10; + for(k=1;k<=4;k++) + if(block_data[i][j][2]==block_data[blockid][k][2]&&block_data[blockid][k][2]>0) + point[i]+=10; + update_ranks(); + return; +} + +void sub_point(short int blockid){ + short int i,j,k; + for(i=1;i<=blocks;i++) + if(i!=blockid&&point[i]>0) + for(j=1;j<=4;j++) + for(k=1;k<=4;k++) + if(block_data[i][j][2]==block_data[blockid][k][2]&&block_data[blockid][k][2]>0) + point[i]+=10; + update_ranks(); return; } -/* short int random(short int id){ //edit this to randomly place blocks */ -/* return id; */ -/* } */ short int search_placable(short int blockid){ //calc the cost (sum of Euclidean distance of lines), returns the number of places short int cost[MAXSIZE][MAXSIZE][2]; //cost[x][y][0]:cost, cost[x][y][1]:rank @@ -116,7 +162,7 @@ short int search_placable(short int blockid){ //calc the cost (sum of Euclidean for(j=0;j0 && board_beta[i][j]==block_data[blockid][k][2]){ place[k][0]=i-block_data[blockid][k][0]; - place[k][1]=i-block_data[blockid][k][1]; + place[k][1]=j-block_data[blockid][k][1]; } } /* printf("%d, %d\n",place[k][0],place[k][1]); */ @@ -140,23 +186,19 @@ short int search_placable(short int blockid){ //calc the cost (sum of Euclidean cost[i][j][0]=-1; else{ cost[i][j][0]=0; - /* printf("%d, %d\n",abs(i-place[k][0]),abs(j-place[k][1])); */ - /* printf("%d\n",abs(i-place[k][0])+abs(j-place[k][1])); */ for(k=1;k<=4;k++){ if(place[k][0]!=SHRT_MIN) - cost[i][j][0]+=abs(i-place[k][0]); + cost[i][j][0]+=ABS(i-place[k][0]); if(place[k][1]!=SHRT_MIN) - cost[i][j][0]+=abs(j-place[k][1]); + cost[i][j][0]+=ABS(j-place[k][1]); } if(cost[i][j][0]==0) - cost[i][j][0]=abs(i-MAXSIZE/2)+abs(j-MAXSIZE/2); - /* cost[i][j][0]+=(short int)abs((int)(i-place[k][0]))+(short int)abs((int)(j-place[k][1])); */ + cost[i][j][0]=MAX(MAX(ABS(i-MAXSIZE/2),ABS(j-MAXSIZE/2)),MAX(ABS(i+blockw-MAXSIZE/2),ABS(j+blockh-MAXSIZE/2)));//*100+ABS(i-MAXSIZE/2)+ABS(j-MAXSIZE/2)+ABS(i+blockw-MAXSIZE/2)+ABS(j+blockh-MAXSIZE/2); cost[i][j][0]=10000-cost[i][j][0]; /* printf("%d\n",cost[i][j][0]); */ } } } - //ok /* calc costrank */ for(i=0;i0&&avail[nowy][nowx-1]>=2) + isbranch++; + if(nowy>0&&avail[nowy-1][nowx]>=2) + isbranch++; + if(nowx=2) + isbranch++; + if(nowy=2) + isbranch++; + if(isbranch>0){ + avail[nowy][nowx]=1; + return 0; + } + if(avail[nowy][nowx]==1) + avail[nowy][nowx]=2; + short int i,src=0; + short int searchorder[4]; //x+-,y+- + /* for(i=0;i<4;i++) */ + /* searchorder[i]=-1; */ + if(nowx>goalx){ + searchorder[src]=0; + src++; + }else + searchorder[3+src]=0; + if(nowy>goaly){ + searchorder[src]=1; + src++; + }else + searchorder[2+src]=1; + if(nowx0&&available(nowx-1,nowy,0)) + return 1; + break; + case 1: + if(nowy>0&&available(nowx,nowy-1,0)) + return 1; + break; + case 2: + if(nowx0){ + found=0; + for(j=0;j0){ board_beta[x+block_data[blockid][1][0]] [y+block_data[blockid][1][1]]=block_data[blockid][1][2]; - add_point(blockid,block_data[blockid][1][2]); + update_ranks(); }else{ board_beta[x+block_data[blockid][1][0]] [y+block_data[blockid][1][1]]=SHRT_MIN; } @@ -196,27 +443,18 @@ void place_block(short int blockid,short int x,short int y){ for(i=2;i<=4;i++) if(block_data[blockid][i][2]>0){ board_beta[x+block_data[blockid][i][0]] [y+block_data[blockid][i][1]]=block_data[blockid][i][2]; - add_point(blockid,block_data[blockid][i][2]); + update_ranks(); }else{ board_beta[x+block_data[blockid][i][0]] [y+block_data[blockid][i][1]]=SHRT_MIN; } } - return; -} - -void erase_line(short int lineid){ - short int i,j; - if(lineid==0) - return; - for(i=0;i0){ //if block exists - if(block_data[i][j][2]==block_data[blockid][1][2]){ //if edge exists - point[i]-=10; - }else if(block_data[blockid][2][2]!=-1){ //if not monomino - if(block_data[i][j][2]==block_data[blockid][2][2]){ //if edge exists - point[i]-=10; - } - if(block_data[i][j][2]==block_data[blockid][3][2]){ //if edge exists - point[i]-=10; - } - if(block_data[i][j][2]==block_data[blockid][4][2]){ //if edge exists - point[i]-=10; - } - } - } - } - update_ranks(); + sub_point(blockid); return; } short int place_and_line(short int blockid){ short int i,j; + if(DEBUG){ + printf("#%d RANKS (rank: block, point)\n",attempts); + for(i=1;i<=blocks;i++){ + printf(" %d: %d, %d\n",i,rank[i],point[rank[i]]); + } + } if(first_block==1){ first_block--; place_block(blockid,MAXSIZE/2,MAXSIZE/2); + point[blockid]=-point[blockid]; + update_ranks(); + if(DEBUG){ + printf("#%d Block %d placed @(%d,%d)\n",attempts,blockid,block_data[blockid][0][0],block_data[blockid][0][1]); + print_board_beta(); + } return 1; } j=search_placable(blockid); for(i=1;i<=j;i++){ + /* printf("place: block %d\n",blockid); */ place_block(blockid,costrank[i][0],costrank[i][1]); - if(try_wire(blockid)) + if(try_wires(blockid)){ + point[blockid]=-point[blockid]; + update_ranks(); return 1; + } remove_block(blockid); } return 0; } -void solve(void){ //solver part - short int i, flag, in_process=1; +void solve(short int seed){ //solver part + short int i, in_process=1; + srand(seed); while(in_process){ - flag=1; - for(i=1;i<=blocks;i++) - if(block_data[rank[i]][0][0]<0){ //not placed - if(!place_and_line(rank[i])){ //if not placable + if(DEBUG){ + printf("\n#%d attempt\n",attempts); + } + while(1){ + i=rank[1]; + if(block_data[i][0][0]<0){ //not placed + if(!place_and_line(i)){ //if not placable point[i]+=100; - if(point[i]>10000){ //no answer - printf("Too many attempts!\n"); + if(point[i]>10000||attempts>=100){ //no answer + printf("Too many trials!\n"); in_process=0; //end solver break; } + shuffle_random(rand()); reset(); break; //solve from beginning } - flag=0; - } - if(flag) - break; + }else + return; + } + attempts++; } return; } @@ -339,9 +579,12 @@ void translate(void){ //translate bigboard to minimal board } void solver(void){ + short int seed=time(NULL); //edit here + /* short int seed=1; //edit here */ + shuffle_random(seed); init_points(); reset(); - solve(); + solve(seed); /* shape(); */ /* print_board_beta(); */ translate(); -- 2.22.0