Loading source/solver.c +44 −4 Changes for source/solver.c: 44 added lines, 4 removed lines. Original line number Diff line number Diff line /* solver.c */ /* Last Change: 2018/07/09 (Mon) 15:54:41. */ /* Last Change: 2018/07/16 (Mon) 10:05:50. */ #include<stdio.h> /* #include<stdlib.h> */ Loading @@ -8,7 +8,8 @@ /* #include<math.h> */ /* #include<time.h> */ int board[8][72][72]; int board[8][72][72]={}; int avail[8][72][72]={}; int depth,height,width; int lines; //z,y,x Loading Loading @@ -91,10 +92,49 @@ int connected(int line){ return 0; } int available(int startx,int starty, int startz){ if(avail[startz][starty][startx]==-1) return 1; if(startx>0&&available(startx-1,starty,startz)) return 1; if(starty>0&&available(startx,starty-1,startz)) return 1; if(startz>0&&available(startx,starty,startz-1)) return 1; if(startx<depth&&available(startx+1,starty,startz)) return 1; if(starty<height&&available(startx,starty+1,startz)) return 1; if(startz<width&&available(startx,starty,startz+1)) return 1; return 0; } int connectable(int linea,int lineb){ //REQUIRED int startx=-1,starty=-1,startz=-1,notfound=1; int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==-linea) if(notfound){ notfound=0; avail[i][j][k]=1; startz=i; starty=j; startx=k; }else avail[i][j][k]=-1; else if(board[i][j][k]==0||board[i][j][k]==lineb||board[i][j][k]==linea) avail[i][j][k]=1; else avail[i][j][k]=0; if(startx==-1||starty==-1||startz==-1){ printf("Error!\n"); return 0; } return available(startx,starty,startz); } void actuallyconnect(int num){ //REQUIRED Loading Loading @@ -153,7 +193,7 @@ void write(void){ } int main(void){ reset(); /* reset(); */ read(); solve(); write(); Loading Loading
source/solver.c +44 −4 Changes for source/solver.c: 44 added lines, 4 removed lines. Original line number Diff line number Diff line /* solver.c */ /* Last Change: 2018/07/09 (Mon) 15:54:41. */ /* Last Change: 2018/07/16 (Mon) 10:05:50. */ #include<stdio.h> /* #include<stdlib.h> */ Loading @@ -8,7 +8,8 @@ /* #include<math.h> */ /* #include<time.h> */ int board[8][72][72]; int board[8][72][72]={}; int avail[8][72][72]={}; int depth,height,width; int lines; //z,y,x Loading Loading @@ -91,10 +92,49 @@ int connected(int line){ return 0; } int available(int startx,int starty, int startz){ if(avail[startz][starty][startx]==-1) return 1; if(startx>0&&available(startx-1,starty,startz)) return 1; if(starty>0&&available(startx,starty-1,startz)) return 1; if(startz>0&&available(startx,starty,startz-1)) return 1; if(startx<depth&&available(startx+1,starty,startz)) return 1; if(starty<height&&available(startx,starty+1,startz)) return 1; if(startz<width&&available(startx,starty,startz+1)) return 1; return 0; } int connectable(int linea,int lineb){ //REQUIRED int startx=-1,starty=-1,startz=-1,notfound=1; int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==-linea) if(notfound){ notfound=0; avail[i][j][k]=1; startz=i; starty=j; startx=k; }else avail[i][j][k]=-1; else if(board[i][j][k]==0||board[i][j][k]==lineb||board[i][j][k]==linea) avail[i][j][k]=1; else avail[i][j][k]=0; if(startx==-1||starty==-1||startz==-1){ printf("Error!\n"); return 0; } return available(startx,starty,startz); } void actuallyconnect(int num){ //REQUIRED Loading Loading @@ -153,7 +193,7 @@ void write(void){ } int main(void){ reset(); /* reset(); */ read(); solve(); write(); Loading