/* solver.c */ /* Last Change: 2019/05/21 (Tue) 18:09:17. */ #include #include"solver.h" #include"io.h" #include #include #include /* #include */ /* #include */ /* #include */ /* #include */ short int connected[MAXLINE]={0}; //if line connected:2, if one end:1, otherwize:0 short int board_beta[MAXSIZE][MAXSIZE]; //big board data //edge:1~MAXLINE, line:-1~-MAXLINE, none:0, wall:SHRT_MIN short int rank[MAXBLOCK+1]; short int done_block[MAXBLOCK+1]; void reset_board(void){ int i,j; for(i=0;imaxw) maxw=i; if(imaxh) maxh=j; if(jW || y>H) return; } } void put_mino(){ int i,j,k,now; std::vector order_w; std::vector order_h; int map_w[4]={0,0,0,0}; int map_h[4]={0,0,0,0}; int len[MAXBLOCK+1]; int check_block[100];//block in the order_w int done_block[100];//fixed block in the order_w int end; int flag=0; order_w.push_back(1); // start from block#1 int index=0; int next=0; int x=0; auto itr=order_w.begin(); while(true){ for(index=order_w.size()-1;index>=0;index--){ // find next block if(done_block[order_w[index]]==0){ next=order_w[index]; //done_block[next]=1; //check_block[next]=1; break; } } if(index==-1) break; // if all blocks are searched itr=order_w.begin(); for(int i=0;i=0;index--){ // find next block if(done_block[order_h[index]]==0){ next=order_h[index]; break; } } //std::cout << "now" << std::endl; if(index==-1) break; // if all blocks are searched itr=order_h.begin(); for(int i=0;i