Commit ca00a809 authored by makoto.nishizawa's avatar makoto.nishizawa

add README

parent 57afb03f
makeで実行ファイルsolverができます.
MAKEFILE
g++ -o solve solver.cpp main.cpp io.c router/router.cpp -std=c++11
./solver < QUESTIONFILEで実行され解答のみを出力します.
必要ヘッダ
<limits.h>
<stdio.h>
<vector>
<algorithm>
"solver.h"
"io.h"
"router/router.hpp"
\ No newline at end of file
......@@ -73,7 +73,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa
lfsr_random_init(seed);
// Step 1
cout << "1st routing ..." << endl;
//cout << "1st routing ..." << endl;
for(i = 0; i < line_num; i++) {
if(adjacents[i]) continue;
#ifdef PRINT_SEARCH
......@@ -90,7 +90,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa
ap_uint<1> overlap_checks[MAX_CELLS];
// Step 2
cout << "rip-up routing ..." << endl;
//cout << "rip-up routing ..." << endl;
short int last_target = -1;
ap_uint<16> round;
for(round = 1; round <= ROUND_LIMIT; round++) {
......
No preview for this file type
......@@ -5,8 +5,10 @@
#include"solver.h"
#include"io.h"
#include<stdio.h>
#include <list>
#include <bits/stdc++.h>
//#include <list>
#include <vector>
#include <algorithm>
//#include <bits/stdc++.h>
#include "router/router.hpp"
/* #include<stdlib.h> */
/* #include<string.h> */
......@@ -38,9 +40,9 @@ void show_blocks(){
int data[4][4];
int i,j,k;
for(i=1;i<blocks;i++){
printf("block #%d\n",i);
//printf("block #%d\n",i);
for(j=1;j<=4;j++){
printf("x:%d y:%d edge:%d\n",block_data[i][j][0],block_data[i][j][1],block_data[i][j][2]);
//printf("x:%d y:%d edge:%d\n",block_data[i][j][0],block_data[i][j][1],block_data[i][j][2]);
}
}
return;
......@@ -132,7 +134,7 @@ int check_put_mino(int i,int x, int y,int flag){// check block#i can put on x,y
int data_mino(int i, int x,int y,int flag){
std::cout << "put mino "<< i << " on " << x <<" " << y << 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,flag)){
for(int l=1;l<5;l++){
......@@ -191,13 +193,13 @@ void put_mino(){
}
if(index==-1){
for(index=blocks;index>0;index--){
std::cout << done_block[index];
//std::cout << done_block[index];
if(done_block[index]==0){
next=index;
break;
}
}
std::cout << endl;
//std::cout << endl;
if(index==0) break; // if all blocks are searched
}
if(index==-1) break; // if all blocks are searched
......@@ -310,7 +312,7 @@ void put_mino(){
printf("\n\nstart making order of height\n");
//printf("\n\nstart making order of height\n");
for(int i=1;i<=blocks;i++){//init status
check_block[i]=0;
done_block[i]=0;
......@@ -445,7 +447,7 @@ void put_mino(){
//if(x==1)break;
}//end of while ture for height
printf("width is \n");
/*printf("width is \n");
for(int i=0;i<order_w.size();i++){
printf("%d ",order_w[i]);
}
......@@ -456,7 +458,7 @@ void put_mino(){
printf("%d ",order_h[i]);
}
printf("\n");
*/
int put_block[100];
int height_c=0,width_c=1;
int next_put=1;
......@@ -476,7 +478,7 @@ void put_mino(){
max_w = block_data[order_w[j]][k][0];
}
}
std::cout<< "add " << order_w[j] << " mino " << max_w+1 << std::endl;
//std::cout<< "add " << order_w[j] << " mino " << max_w+1 << std::endl;
width_c+=max_w+1;
width_c+=SPACE;
}
......@@ -490,34 +492,9 @@ void put_mino(){
}
height_c+=max_h+1;
}
print_answer();
//print_answer();
//int next;
int mino_x,mino_y;
/*for(int i=0;i<blocks;i++){
next=mino_order[i];
mino_x=block_data[i][0][0];
mino_y=block_data[i][0][1];
del_mino(next);
if(i%2){
for(int j=mino_x-1;j>1;j--){
if(check_put_mino(next,j,mino_y)){
mino_x=j;
}else{
break;
}
}
}else{
for(int j=mino_y-1;j>1;j--){
if(check_put_mino(next,mino_x,j)){
mino_y=j;
}else{
break;
}
}
}
data_mino(next,mino_x,mino_y);
}*/
}
void make_board_str(int size_x,int size_y){
for(int y = 0; y < size_y; y++) {
......@@ -552,7 +529,7 @@ void make_small(){
}
W=maxw+2;
H=maxh+2;
cout << "W is " << W << " H is " << H << endl;
//cout << "W is " << W << " H is " << H << endl;
return;
}
......@@ -569,14 +546,14 @@ void make_answer(){
int line(){
make_board_str(W,H);
std::cout << lfsr <<std::endl;
//std::cout << lfsr <<std::endl;
int status = router(W, H, line_num, board_str);
fix_to_board(W,H);
if(status){
std::cout << "success to line" << std::endl;
//std::cout << "success to line" << std::endl;
make_answer();
}else{
std::cout << "failed to line" << std::endl;
//std::cout << "failed to line" << std::endl;
}
return status;
}
......@@ -632,7 +609,7 @@ int move_mino(int mino,int x, int y){ //1:success 2:failed
break;
}
}
std::cout << "mino " << mino << " can move " << move_x << " " << move_y << std::endl;
//std::cout << "mino " << mino << " can move " << move_x << " " << move_y << std::endl;
if(move_x!=0 || move_y!=0){
mino_x=block_data[mino][0][0];
mino_y=block_data[mino][0][1];
......@@ -682,9 +659,9 @@ int move_along_line(int mino, int l,int dir,int check_num){
if(dir==1){
if(line_board[mino_x+block_data[mino][check_num][0]-count][mino_y+block_data[mino][check_num][1]]!=l) break;
for(int i=1;i<=4;i++){
cout << i << endl;
//cout << i << endl;
if(mino_x+block_data[mino][i][0]-count<1){
cout << "out of grid x " << endl;
//cout << "out of grid x " << endl;
flag=1;
break;
}
......@@ -697,8 +674,8 @@ int move_along_line(int mino, int l,int dir,int check_num){
}
if(line_board[mino_x+block_data[mino][i][0]-count][mino_y+block_data[mino][i][1]]==l && (line_board[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]]==0 || line_board[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]]==l) &&put_data[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]]==0){
//cout <<"continue" << endl;
cout << mino_x+block_data[mino][i][0]-count << " " << mino_y+block_data[mino][i][1] << " " << line_board[mino_x+block_data[mino][i][0]-count][mino_y+block_data[mino][i][1]] <<endl;
cout << mino_x+block_data[mino][i][0]-count-1 << " " << mino_y+block_data[mino][i][1] << " " << line_board[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]] <<endl;
//cout << mino_x+block_data[mino][i][0]-count << " " << mino_y+block_data[mino][i][1] << " " << line_board[mino_x+block_data[mino][i][0]-count][mino_y+block_data[mino][i][1]] <<endl;
//cout << mino_x+block_data[mino][i][0]-count-1 << " " << mino_y+block_data[mino][i][1] << " " << line_board[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]] <<endl;
//line_board[mino_x+block_data[mino][i][0]-count-1][mino_y+block_data[mino][i][1]]=l;
continue;
......@@ -743,7 +720,7 @@ int move_along_line(int mino, int l,int dir,int check_num){
}
flag=1;
//cout << "can not move y" << endl;
cout << i << " " << check_num << endl;
//cout << i << " " << check_num << endl;
break;
}else{
//cout << "pass" << endl;
......@@ -779,7 +756,7 @@ int set_num(int mino,int line){
int move2line(){
vector< pair<int,int>> move_order;
int move=0,check_line=0,mino_dir,flag=0,check_num=0;
std::cout << "start move2line" << std::endl;
//std::cout << "start move2line" << std::endl;
for(int i=1;i<=blocks;i++){
move_order.push_back(make_pair(block_data[i][0][0]+block_data[i][0][1],i));
}
......@@ -789,7 +766,7 @@ int move2line(){
check_line=set_line(move_order[i].second);
check_num=set_num(move_order[i].second,check_line);
if(check_line==0) continue;
cout << "move " << move_order[i].second<< " line " <<check_line << endl;
//cout << "move " << move_order[i].second<< " line " <<check_line << endl;
mino_dir=move_dir(move_order[i].second,check_line);
flag = move_along_line(move_order[i].second, check_line,mino_dir,check_num);
if(flag){
......@@ -869,13 +846,13 @@ int reshape(){
del_mino_line(next);
while(true){
if(move_mino(next,1,1)){
cout << "moved" << endl;
//cout << "moved" << endl;
flag=1;
}else{
break;
}
limit++;
cout << limit << endl;
//cout << limit << endl;
if(limit>=end) break;
}
if(flag){
......@@ -917,7 +894,7 @@ void resize(){
}
w=maxw-minw+1;
h=maxh-minh+1;
cout << "w is "<< w << "h is " << endl;
//cout << "w is "<< w << "h is " << endl;
return;
}
......@@ -994,7 +971,7 @@ void solve(void){
printf("too large\n");
return;
}
std::cout << "height is " << H <<" width is "<< W << std::endl;
//std::cout << "height is " << H <<" width is "<< W << std::endl;
init_mino();
put_mino();
......@@ -1013,7 +990,7 @@ void solve(void){
}
}
if(check_space==0 && check_line==0){
cout << "no more reshape" << endl;
//cout << "no more reshape" << endl;
}
//resize();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment