From 6e9f6b3475f7ae655810e2254681b71c0307556a Mon Sep 17 00:00:00 2001 From: royus Date: Mon, 29 Jul 2019 09:38:32 +0900 Subject: [PATCH] fix --- main | Bin 27144 -> 27144 bytes solver.c | 98 +++++++++++++++++++++++++++++++------------------------ 2 files changed, 56 insertions(+), 42 deletions(-) diff --git a/main b/main index be6f3afb94aae43b3f4b1e70da19fc5638e8c72a..083231ea6a1c1f8d6af87415c0c1487b22153963 100755 GIT binary patch delta 3928 zcmZu!3vd)w7VYjZgiqkj9X6C!BFXg0GFVF(H7&?7y|L|8!l0V-naT9k;DDP$`$ ziJ^tAq1n_vv8XM@>fUWmOp9%!StTjJt5#O75cq< z-?{gmcklbnrW5?86MTJlvV9!K@f^pEE5`@_?Bn*HD;r^d=8ESaKV$ml#@n+~yDqHT zMvH7Sgc?Wa8QWWlGBV>4WaQH>#hPcEc6+beZM75&On?3+S0om)G!>?%_!t~QxgAOpwnZTs z9V8s7yDUGS1Ogj@iuo;zv~n&0QvN-_ueMZ!W>c(NP9Cz6oBoOgHQq;)06mW<^75kx#=>xXAtO2s+17uljVX2n&>>6g3gNXqClZ$u9ucs7JFiUy1`;sY_n;x%d%L=ES?<$m8`$m z6ss(w10-80ETd!W-zDA#b!>hq?ukWN)X-*+fLf=SBE2*A=EahwfcPqzo?Kkz$-YH+qKF>L&bLp!`^I3wyIHWTHKG3>OuI^V zWrEsXm1bc;qeai>2C)TGcC8PYw9<5!G3T6jLc)sB3QJh`;CnTJ-oB=W! zATZDYr{xAwBB(q(ObhcReqTO;_+2je7*mWRgn3^8&1$9<7FKNj{U|H?gJ`u@%Cn`zHLxN9xosCth{T_1P zrydd><dYzznS&p6^CG$~?ti#A- z7=fip3GIGH<7NaSOTt~i=A$Q)mSdX!g4H{s>D9(yfGLk^dJO}z&IWYk=y^nGm9(AP zEbJlK$`azvgRc%~HFXodm-=x06rn>}%t~tN<{|A2bm04-rq&Os$}M07ji$b0YBOOk zqlbmwYC2nB35R8R_O_J31w?CtMj<&8$4S9=89ijZO~m?*G?#NwI?t&8A>KAk{QzTf za4VasM^8!>_3G3iNQY_=Z@Z>eVNBA#3~psfaQ13fE}di}$AbG=0#L2fl6GDSHX<{I zc=&H_K(dmW$ZjA3*#=qUFUAoL_$smxB9T7^1e^7Of2pKJ>!J}N zAIA8D7_ZP%1-H(MMJmlk(i&fb8bF|cr1HV)1l{xLwMuF$Vx+{UeLd4>&^XJ8T5xxWdm5RDq6`X%M z#9hN;KE%g{#Y~7#8-ugrXtLoITt3z!M1T<+4FflTXdE>0N4b=LA=F;#Q zhv;5sL4ZZHu8C_X4M)`UpAF+H7mA0)W_NYs#{T?Qc%QN5?b9FPeY$A4`Ug@K1i?!J z&p0&zyRU-y$XbUSJu_O?Kd^N(s_i4*V9G8zdTx}D@4|tS`Y=&n2GU!1HL$kGr}YJ3 zfUypxZq|dGKL;Ai!-gRb+jwsHl$G^4II=GX){X_f0$1%?1FurGv&!Mq+T`dL@N^U- z%ekt%a8OoND0S5j4|0B4HV!i~JU37}>*;v{tYkdRxmN}UJy*SQ%JDXg;|3EW) zo+Ggv(6Gt0%B3~v5Y>UuKJBE}x^anm76rgX=+jl^f#d*12c03i+5^$mDeJ}GHzshd z9vZ!4a-hdQ5!{*wxfe#bdIktCh2~*m^*AagH7i=uc15e+E|@o@bv3rhMpU+O0*J8t z0T=xayyZTd0vXT35>K~3-RQ!RCf6QnMo}LTmx{~8<>I5uT4Ntg2I-+!W$5vOJiCzj zaY!wBb%fyP3uTvYw+W8k(0zZlv(aw9?m-y}p5A_)zn8%BSZLi?V0P${d(niKKZ!`)^FD%NDe{iY8-UolV!=} zc1vx8im4kM^e;~qE-a7#(k+Usi^?rnSzK;PwPa6R9{OecKwN%qvNis6Tt1Ub^OQoN RdlFrUrY0rylJauGe*qAL7-#?h delta 3656 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 diff --git a/solver.c b/solver.c index 7ce3133..73bac59 100644 --- a/solver.c +++ b/solver.c @@ -1,5 +1,5 @@ /* solver.c */ -/* Last Change: 2019/07/25 (Thu) 14:39:28. */ +/* Last Change: 2019/07/29 (Mon) 09:32:40. */ #include #include @@ -151,51 +151,65 @@ short int search_placable(short int blockid){ //calc the cost (sum of Euclidean short int i,j,k,l,index=0; short int place[5][2]; //(relative) place of edge #block_data[blockid][1-4][] (x,y) short int blockw=0,blockh=0; - if(block_data[blockid][2][2]==-1){ //if monomino - return 1; - } /* calc cost */ - for(k=1;k<=4;k++){ - place[k][0]=SHRT_MIN; - place[k][1]=SHRT_MIN; - for(i=0;i0 && board_beta[i][j]==block_data[blockid][k][2]){ - place[k][0]=i-block_data[blockid][k][0]; - place[k][1]=j-block_data[blockid][k][1]; + if(block_data[blockid][2][2]==-1){ //if monomino + for(i=0;i=0&&board_beta[i-1][j]==0) + cost[i-1][j][0]=1; + if(j-1>=0&&board_beta[i][j-1]==0) + cost[i][j-1][0]=1; } + } + }else{ + for(k=1;k<=4;k++){ + place[k][0]=SHRT_MIN; + place[k][1]=SHRT_MIN; + for(i=0;i0 && board_beta[i][j]==block_data[blockid][k][2]){ + place[k][0]=i-block_data[blockid][k][0]; + place[k][1]=j-block_data[blockid][k][1]; + } + } + /* printf("%d, %d\n",place[k][0],place[k][1]); */ } - /* printf("%d, %d\n",place[k][0],place[k][1]); */ - } - for(k=1;k<=4;k++){ - if(block_data[blockid][k][0]>blockw) - blockw=block_data[blockid][k][0]; - if(block_data[blockid][k][1]>blockh) - blockh=block_data[blockid][k][1]; - } - /* printf("%d: %d, %d\n",blockid,blockw,blockh); */ - for(i=0;i=MAXSIZE || j+blockh>=MAXSIZE) //out of board - cost[i][j][0]=-1; - else if( 0!=board_beta[i+block_data[blockid][1][0]] [j+block_data[blockid][1][1]] //alredy something - || 0!=board_beta[i+block_data[blockid][2][0]] [j+block_data[blockid][2][1]] - || 0!=board_beta[i+block_data[blockid][3][0]] [j+block_data[blockid][3][1]] - || 0!=board_beta[i+block_data[blockid][4][0]] [j+block_data[blockid][4][1]]) - cost[i][j][0]=-1; - else{ - cost[i][j][0]=0; - for(k=1;k<=4;k++){ - if(place[k][0]!=SHRT_MIN) - cost[i][j][0]+=ABS(i-place[k][0]); - if(place[k][1]!=SHRT_MIN) - cost[i][j][0]+=ABS(j-place[k][1]); + for(k=1;k<=4;k++){ + if(block_data[blockid][k][0]>blockw) + blockw=block_data[blockid][k][0]; + if(block_data[blockid][k][1]>blockh) + blockh=block_data[blockid][k][1]; + } + /* printf("%d: %d, %d\n",blockid,blockw,blockh); */ + for(i=0;i=MAXSIZE || j+blockh>=MAXSIZE) //out of board + cost[i][j][0]=-1; + else if( 0!=board_beta[i+block_data[blockid][1][0]] [j+block_data[blockid][1][1]] //alredy something + || 0!=board_beta[i+block_data[blockid][2][0]] [j+block_data[blockid][2][1]] + || 0!=board_beta[i+block_data[blockid][3][0]] [j+block_data[blockid][3][1]] + || 0!=board_beta[i+block_data[blockid][4][0]] [j+block_data[blockid][4][1]]) + cost[i][j][0]=-1; + else{ + cost[i][j][0]=0; + for(k=1;k<=4;k++){ + if(place[k][0]!=SHRT_MIN) + cost[i][j][0]+=ABS(i-place[k][0]); + if(place[k][1]!=SHRT_MIN) + cost[i][j][0]+=ABS(j-place[k][1]); + } + if(cost[i][j][0]==0) + 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]); */ } - if(cost[i][j][0]==0) - 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]); */ } } } -- 2.22.0