diff --git a/main.cpp b/main.cpp index e9ceaf18db125f62f2cd66579043b1d61b133608..81a0ddd8e3f6a21d35af35ab9549a04d892f062e 100644 --- a/main.cpp +++ b/main.cpp @@ -5,8 +5,8 @@ int main(void){ read_problem(); - H=20; - W=20; + H=40; + W=40; solver(); print_answer(); diff --git a/solve b/solve index 080fe21197bb8c0c0ad65cbfa6bcdda00337b43a..8ecd705863e12d7502a54fdbc5e1260160933b21 100644 Binary files a/solve and b/solve differ diff --git a/solver.cpp b/solver.cpp index 795184c05f8e670e3a3c710753b7e5211aae9eed..325e79d978c908ce156b8e9a860071e83b421d4e 100644 --- a/solver.cpp +++ b/solver.cpp @@ -109,10 +109,10 @@ void del_mino(int mino){ int check_put_mino(int i,int x, int y){// check block#i can put on x,y for(int j=1;j<5;j++){ - if(x+block_data[i][j][0]>19){ + if(x+block_data[i][j][0]>W-1){ return 0; } - if(y+block_data[i][j][1]>19){ + if(y+block_data[i][j][1]>H-1){ return 0; } if(board_data[x+block_data[i][j][0]][y+block_data[i][j][1]]!=0){ @@ -127,7 +127,7 @@ int check_put_mino(int i,int x, int y){// check block#i can put on x,y void data_mino(int i, int x,int y){ - std::cout << "put mino "<< i << std::endl; + std::cout << "put mino "<< i << "on" << x <<" " << y << std::endl; for(int j=0;j<100;j++){ if(check_put_mino(i,x,y)){ for(int l=1;l<5;l++){ @@ -167,22 +167,38 @@ void put_mino(){ int index=0; int next=0; int x=0; + int another=0; auto itr=order_w.begin(); while(true){ + another=0; for(index=order_w.size()-1;index>=0;index--){ // find next block if(done_block[order_w[index]]==0){ next=order_w[index]; + another=1; //done_block[next]=1; //check_block[next]=1; break; } } + if(index==-1){ + for(index=blocks;index>0;index--){ + if(done_block[index]==0){ + next=index; + break; + } + } + if(index==0) break; // if all blocks are searched + } 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]; + another=1; break; } } + if(index==-1){ + std::cout << "left block search" << std::endl; + for(index=blocks;index>0;index--){ + if(done_block[index]==0){ + next=index; + break; + } + } + if(index==0) break; // if all blocks are searched + } //std::cout << "now" << std::endl; - if(index==-1) break; // if all blocks are searched - itr=order_h.begin(); - for(int i=0;imax_w) max_w = block_data[order_w[j]][k][0]; } - for(int j=0;jmax_h) max_h = block_data[next_put][k][1]; } - put_block[next_put]=1; - print_answer(); + height_c+=max_h+1; } + print_answer(); //int next; int mino_x,mino_y; /*for(int i=0;i