Commit e4e68357 authored by royus's avatar royus
Browse files

require_connect

parent 7c870e2c
Loading
Loading
Loading
Loading
+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> */
@@ -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
@@ -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
@@ -153,7 +193,7 @@ void write(void){
}

int main(void){
	reset();
	/* reset(); */
	read();
	solve();
	write();