int main(int argC, char *args[]) /****************************************************/ { char colName[64], depName[64], str[1024]; double startTime, stopTime; s32 *deps, origC; u32 seed=DEFAULT_SEED; long testMode=0; struct stat fileInfo; nfs_sparse_mat_t M; llist_t C; int i; FILE *fp, *ifp; strcpy(colName, DEFAULT_COLNAME); strcpy(depName, DEFAULT_DEPNAME); printf(START_MSG, GGNFS_VERSION); seed=time(0); /* This probably shouldn't be needed, but whatever. */ seed = ((seed % 1001)*seed) ^ (171*seed); for (i=1; i<argC; i++) { if (strcmp(args[i], "-v")==0) { verbose++; } else if (strcmp(args[i], "-seed")==0) { if ((++i) < argC) { seed = atol(args[i]); } } else if (strcmp(args[i], "-save")==0) { if ((++i) < argC) { matsave_interval = 60 * atoi(args[i]); } } else if (strcmp(args[i], "-test")==0) { testMode = 1; } else if (strcmp(args[i], "--help")==0) { printf("USAGE: %s %s\n", args[0], USAGE); exit(0); } } srand(seed); if (stat("depinf", &fileInfo)) { printf("Could not stat depinf! Are you trying to run %s to soon?\n", args[0]); return -1; } seedBlockLanczos(seed); startTime = sTime(); msgLog("", "GGNFS-%s : matsolve (seed=%" PRIu32 ")", GGNFS_VERSION, seed); printf("Using PRNG seed=%" PRIu32 ".\n", seed); readSparseMat(&M, "spmat"); ll_read(&C, "sp-index"); printf("Verifying column map..."); fflush(stdout); ll_verify(&C); printf("done.\n"); printf("Matrix loaded: it is %" PRId32 " x %" PRId32 ".\n", M.numRows, M.numCols); if (M.numCols < (M.numRows + 64)) { printf("More columns needed (current = %" PRId32 ", min = %" PRId32 ")\n", M.numCols, M.numRows+64); free(M.cEntry); free(M.cIndex); exit(-1); } if (checkMat(&M, delCols, &numDel)) { printf("checkMat() returned some error! Terminating...\n"); exit(-1); } /* We need to know how many columns there were in the original, unpruned matrix, so we know how much memory to allocate for the dependencies. */ if (!(ifp = fopen("depinf", "rb"))) { fprintf(stderr, "Error opening depinf for read!\n"); exit(-1); } readBinField(str, 1024, ifp); while (!(feof(ifp)) && strncmp(str, "END_HEADER",10)) { if (strncmp(str, "NUMCOLS: ", 9)==0) { sscanf(&str[9], "%" SCNx32, &origC); } readBinField(str, 1024, ifp); } fclose(ifp); printf("Original matrix had %" PRId32 " columns.\n", origC); if (!(deps = (s32 *)malloc(origC*sizeof(s32)))) { printf("Could not allocate %" PRIu32 " bytes for the dependencies.\n", (u32)(origC*sizeof(s32)) ); free(M.cEntry); free(M.cIndex); return -1; } if (getDependencies(&M, &C, deps, origC, testMode) == 0) { if (!(ifp = fopen("depinf", "rb"))) { fprintf(stderr, "Error opening depinf for read!\n"); exit(-1); } printf("Writing dependencies to file %s.\n", depName); if (!(fp = fopen(depName, "wb"))) { fprintf(stderr, "Error opening %s for write!\n", depName); fclose(ifp); } else { /* Get the header information from depinf. */ readBinField(str, 1024, ifp); while (!(feof(ifp)) && strncmp(str, "END_HEADER",10)) { writeBinField(fp, str); readBinField(str,1024,ifp); } if (strncmp(str, "END_HEADER",10)) { fprintf(stderr, "Error: depinf is corrupt!\n"); fclose(ifp); fclose(fp); exit(-1); } writeBinField(fp, str); fclose(ifp); fwrite(deps, sizeof(s32), origC, fp); fclose(fp); } } stopTime = sTime(); printf("Total elapsed time: %1.2lf seconds.\n", stopTime-startTime); msgLog("", "Heap stats for matsolve run:"); logHeapStats(); free(M.cEntry); free(M.cIndex); free(deps); return 0; }
int main(int argc, char** args){ PetscErrorCode err; PetscViewer fd = NULL; Mat invL1 = NULL, invU1 = NULL, invL2 = NULL, invU2 = NULL, H12 = NULL, H21 = NULL; Vec order = NULL, r = NULL; //, or = NULL; //dimension: n: n1 + n2 Vec seeds = NULL; // Vec r1 = NULL, q1 = NULL, t1_1 = NULL, t1_2 = NULL, t1_3 = NULL, t1_4 = NULL, t1_5 = NULL; // dimension: n1 // Vec r2 = NULL, q2 = NULL, q_tilda = NULL, t2_1 = NULL, t2_2 = NULL, t2_3 = NULL; // dimension: n2 PetscRandom rand; PetscLogDouble tic, toc, total_time, time; PetscInt n, i; PetscMPIInt rank, size; PetscInt seed; PetscScalar c, val; PetscInt QN = 100; // Initialize PETSC and MPI err = PetscInitialize(&argc, &args, (char*) 0, help); CHKERRQ(err); err = MPI_Comm_size(PETSC_COMM_WORLD, &size); CHKERRQ(err); err = MPI_Comm_rank(PETSC_COMM_WORLD, &rank); CHKERRQ(err); err = PetscPrintf(PETSC_COMM_WORLD, "mpi size: %d\n", size); CHKERRQ(err); // Read matrices and an ordering vector err = PetscPrintf(PETSC_COMM_WORLD, "Read inputs (invL1, invU1, invL2, invU2, H12, H21, order)\n"); CHKERRQ(err); err = loadMat("./data/invL1.dat", &invL1, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("invL1", invL1); CHKERRQ(err); err = loadMat("./data/invU1.dat", &invU1, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("invU1", invU1); CHKERRQ(err); err = loadMat("./data/invL2.dat", &invL2, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("invL2", invL2); CHKERRQ(err); err = loadMat("./data/invU2.dat", &invU2, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("invU2", invU2); CHKERRQ(err); err = loadMat("./data/H12.dat", &H12, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("H12", H12); CHKERRQ(err); err = loadMat("./data/H21.dat", &H21, PETSC_COMM_WORLD, MATMPIAIJ, &fd); CHKERRQ(err); err = checkMat("H21", H21); CHKERRQ(err); err = loadVec("./data/order.dat", &order, PETSC_COMM_SELF, &fd); CHKERRQ(err); //all processes must have this vector for ordering the result vector. err = checkVec("order", order); CHKERRQ(err); // shift -1 for zero-based index err = VecShift(order, -1); CHKERRQ(err); err = VecGetSize(order, &n); CHKERRQ(err); seed = 5; c = 0.05; err = PetscTime(&tic); CHKERRQ(err); //err = BearQueryMat(seed, c, invL1, invU1, invL2, invU2, H12, H21, order); CHKERRQ(err); //err = PetscTime(&toc); CHKERRQ(err); //time = toc - tic; //err = PetscPrintf(PETSC_COMM_WORLD, "running time: %f sec\n", time); CHKERRQ(err); ///* 100 times querying err = VecCreateSeq(PETSC_COMM_SELF, QN, &seeds); CHKERRQ(err); err = VecSetFromOptions(seeds); CHKERRQ(err); err = PetscRandomCreate(PETSC_COMM_WORLD, &rand); CHKERRQ(err); err = PetscRandomSetSeed(rand, 100); CHKERRQ(err); err = PetscRandomSetInterval(rand, (PetscScalar) 0, (PetscScalar) n); CHKERRQ(err); err = PetscRandomSetFromOptions(rand); CHKERRQ(err); err = VecSetRandom(seeds, rand); CHKERRQ(err); err = PetscRandomDestroy(&rand); CHKERRQ(err); seed = 5; //seed is give by user on one-based index c = 0.05; i = 0; err = VecDuplicate(order, &r); CHKERRQ(err); for(i = 0; i < QN; i++){ err = VecGetValues(seeds, 1, &i, &val); seed = (PetscInt) val; //err = PetscPrintf(PETSC_COMM_SELF, "rank: %d, seed: %d\n", rank, seed); err = PetscTime(&tic); CHKERRQ(err); err = BearQuery(seed, c, invL1, invU1, invL2, invU2, H12, H21, order, r); CHKERRQ(err); err = PetscTime(&toc); CHKERRQ(err); time = toc - tic; err = PetscPrintf(PETSC_COMM_WORLD, "running time: %f sec\n", time); CHKERRQ(err); total_time += time; } err = PetscPrintf(PETSC_COMM_WORLD, "average running time: %f sec\n", total_time/QN); CHKERRQ(err); err = VecDestroy(&r); /* err = MatGetSize(H12, &n1, &n2); CHKERRQ(err); n = n1 + n2; err = PetscPrintf(PETSC_COMM_WORLD, "n1: %d, n2: %d\n", n1, n2); CHKERRQ(err); err = VecCreateMPI(PETSC_COMM_WORLD, PETSC_DECIDE, n, &r); CHKERRQ(err); err = VecCreateMPI(PETSC_COMM_WORLD, PETSC_DECIDE, n1, &q1); CHKERRQ(err); err = VecCreateMPI(PETSC_COMM_WORLD, PETSC_DECIDE, n2, &q2); CHKERRQ(err); err = VecSet(q1, 0); CHKERRQ(err); err = VecSet(q2, 0); CHKERRQ(err); seed = seed - 1; // shift -1 for zero-based index err = VecGetValues(order, 1, &seed, &val); CHKERRQ(err); oseed = (PetscInt) val; err = PetscPrintf(PETSC_COMM_WORLD, "Given seed: %d, Reorered seed: %d (0 ~ n-1)\n", seed, oseed); CHKERRQ(err); if(oseed < n1){ err = VecSetValues(q1, 1, &oseed, &one, INSERT_VALUES); CHKERRQ(err); }else{ oseed = oseed - n1; err = VecSetValues(q2, 1, &oseed, &one, INSERT_VALUES); CHKERRQ(err); //err = printVecSum(q2); } err = VecAssemblyBegin(q1); CHKERRQ(err); err = VecAssemblyBegin(q2); CHKERRQ(err); err = VecAssemblyEnd(q1); CHKERRQ(err); err = VecAssemblyEnd(q2); CHKERRQ(err); err = VecDuplicate(q1, &r1); CHKERRQ(err); err = VecDuplicate(q1, &t1_1); CHKERRQ(err); err = VecDuplicate(q1, &t1_2); CHKERRQ(err); err = VecDuplicate(q1, &t1_3); CHKERRQ(err); err = VecDuplicate(q1, &t1_4); CHKERRQ(err); err = VecDuplicate(q1, &t1_5); CHKERRQ(err); err = VecDuplicate(q2, &r2); CHKERRQ(err); err = VecDuplicate(q2, &q_tilda); CHKERRQ(err); err = VecDuplicate(q2, &t2_1); CHKERRQ(err); err = VecDuplicate(q2, &t2_2); CHKERRQ(err); err = VecDuplicate(q2, &t2_3); CHKERRQ(err); // Start matrix-vec multiplications err = MatMult(invL1, q1, t1_1); CHKERRQ(err); err = MatMult(invU1, t1_1, t1_2); CHKERRQ(err); err = MatMult(H21, t1_2, t2_1); CHKERRQ(err); err = VecAXPBYPCZ(q_tilda, 1.0, -1.0, 0.0, q2, t2_1); CHKERRQ(err); err = MatMult(invL2, q_tilda, t2_2); CHKERRQ(err); err = MatMult(invU2, t2_2, r2); CHKERRQ(err); err = MatMult(H12, r2, t1_3); CHKERRQ(err); err = VecAXPBYPCZ(t1_4, 1.0, -1.0, 0.0, q1, t1_3); CHKERRQ(err); err = MatMult(invL1, t1_4, t1_5); CHKERRQ(err); err = MatMult(invU1, t1_5, r1); CHKERRQ(err); //err = printVecSum(r1); //err = VecView(r2, PETSC_VIEWER_STDOUT_WORLD); // Concatenate r1 and r2 err = VecMerge(r1, r2, r); CHKERRQ(err); err = VecScale(r, c); CHKERRQ(err); //err = VecView(r, PETSC_VIEWER_STDOUT_WORLD); err = VecDuplicate(r, &or); CHKERRQ(err); err = VecReorder(r, order, or); CHKERRQ(err); //err = VecView(or, PETSC_VIEWER_STDOUT_WORLD);*/ // Destory matrices and vectors err = MatDestroy(&invL1); CHKERRQ(err); err = MatDestroy(&invU1); CHKERRQ(err); err = MatDestroy(&invL2); CHKERRQ(err); err = MatDestroy(&invU2); CHKERRQ(err); err = MatDestroy(&H12); CHKERRQ(err); err = MatDestroy(&H21); CHKERRQ(err); err = VecDestroy(&order); CHKERRQ(err); err = VecDestroy(&r); CHKERRQ(err); err = VecDestroy(&seeds); CHKERRQ(err); //err = VecDestroy(&or); CHKERRQ(err); /* err = VecDestroy(&r1); CHKERRQ(err); err = VecDestroy(&q1); CHKERRQ(err); err = VecDestroy(&t1_1); CHKERRQ(err); err = VecDestroy(&t1_2); CHKERRQ(err); err = VecDestroy(&t1_3); CHKERRQ(err); err = VecDestroy(&t1_4); CHKERRQ(err); err = VecDestroy(&t1_5); CHKERRQ(err); err = VecDestroy(&r2); CHKERRQ(err); err = VecDestroy(&q2); CHKERRQ(err); err = VecDestroy(&q_tilda); CHKERRQ(err); err = VecDestroy(&t2_1); CHKERRQ(err); err = VecDestroy(&t2_2); CHKERRQ(err); err = VecDestroy(&t2_3); CHKERRQ(err);*/ // Finalize err = PetscFinalize(); CHKERRQ(err); return 0; }
/* main function */ int main ( int argc , char * argv[] ) { int **del; long c1, c2, c3; int err, atDelay, atDelay2; double corr, corr2, corr_nd, corr2_nd; /* parsing input params */ char *inputFile, *maskFile, *fout1;; inputFile = argv[1]; fout1 = argv[2]; // Because this program is written in such a hurry, HARDCODING! int goodValues = 28146; fprintf(stderr, "Allocating some memory... "); double *inputArray; inputArray = (double*)calloc(goodValues*goodValues, sizeof(double)); double **out; out = (double**)calloc(goodValues,sizeof(double*)); for(int i = 0; i < goodValues; i++ ) out[i] = (double*)calloc(goodValues,sizeof(double)); fprintf(stderr, "...DONE!\n"); fprintf(stderr, "Reading data ... "); FILE * file; file = fopen( inputFile , "r" ); double d; for ( int i = 0 ; i < goodValues*goodValues ; i++ ) { fscanf( file, "%lf", &d ); inputArray[i] = d; } fprintf(stderr, "...DONE!\n"); fprintf(stderr, "**performing 2d matrix transfer ... \n"); #pragma omp parallel for for ( int i = 0 ; i < goodValues ; i++ ) { for ( int j = 0 ; j < goodValues ; j++ ) { out[i][j] = inputArray[i*goodValues+j]; if (out[i][j] != out[i][j]) out[i][j]=0.0; if (out[i][j] > 1.0 ) out[i][j]=1.0; if (out[i][j] < -1.0 ) out[i][j]=-1.0; } } fprintf(stderr, "done!**\n"); free(inputArray); // Checking matrix integrety before saving fprintf(stderr, "Checking matrix integrity before saving ... \n"); checkMat( out , goodValues ); fprintf(stderr, "done!**\n"); fprintf(stderr, "**saving output..."); FILE *output; output = fopen( fout1, "w" ); fprintf( output, "%i \n", goodValues ); for(int i = 0 ; i < goodValues ; i++ ) { for(int j = i ; j < goodValues ; j++ ) { fprintf(output, "%lf \n", out[i][j]); } } fprintf(stderr, "done!**\n"); for(int i=0;i<goodValues;i++)free(out[i]); free(out); fclose(output); return 0; }
bool ensureMat(cv::Mat& mat, int depth,int channels,cv::Size size){ if(checkMat(mat,depth,channels,size)) return true; mat = cv::Mat(size, CV_MAKETYPE(depth,channels)); return !mat.empty(); }
int main(int argc,char* argv[]){ skl::OptParser options; std::vector<std::string> args; opt_parse(options,argc,argv,args); if(options.help()){ options.usage(); return EXIT_FAILURE; } skl::VideoCapture cam; skl::VideoCaptureParams params; if(!camera_setting.empty()){ params.load(camera_setting); } // CAUTION: call opt_parse_cap_prop after opt_parse opt_parse_cap_prop(params); if(input_file.empty()){ cam.open(CV_CAP_OPENNI + dev); // cam.set(skl::OPENNI_IMAGE_GENERATOR,true); // cam.set(skl::OPENNI_DEPTH_GENERATOR,true); } else{ cam.open(input_file); } // CAUTION: set params after open the camera. cam.set(params); // std::cout << "Camera Parameter Settings" << std::endl; // std::cout << cam.get(); if(!cam.isOpened()){ std::cerr << "ERROR: failed to open video." << std::endl; std::cerr << " Maybe, camera is not connected to the PC??" << std::endl; return EXIT_FAILURE; } cv::namedWindow("image",0); cv::namedWindow("depth",0); cv::namedWindow("valid depth mask",0); cv::Mat image, depth, valid_depth_mask; while('q'!=cv::waitKey(10) && cam.grab()){ cam.retrieve(depth,CV_CAP_OPENNI_DEPTH_MAP) ; assert(checkMat(depth,CV_16U,1)); cam.retrieve(image,CV_CAP_OPENNI_BGR_IMAGE) ; assert(checkMat(image,CV_8U,3,depth.size())); cam.retrieve(valid_depth_mask,CV_CAP_OPENNI_VALID_DEPTH_MASK); assert(checkMat(valid_depth_mask,CV_8U,1,depth.size())); cv::imshow("image",image); cv::imshow("depth",depth); cv::imshow("valid depth mask",valid_depth_mask); } cv::destroyWindow("image"); cv::destroyWindow("depth"); cv::destroyWindow("valid depth mask"); return EXIT_SUCCESS; }
void rec(int M1[5][5], int M2[5][5], int i, int j) {int I,J; z++; if(z>3000) { //printf("\nzzzzzzzzzzz\n"); int flag=1,r=0,c=0,ii,jj,f=0,k,p=pc; //display(aa); for(k=0;k<25;k++){ if(aa[aai[k]][aaj[k]]/10==p) { r=aai[k];c=aaj[k]; ////printf("\ntrap : %d %d\n",r,c); break;} } if((aa[0][0]/10==0 && aa[0][1]/10==3-p && aa[1][0]/10==3-p)) { r=0;c=0; //printf("\ntrap1 : %d %d\n",r,c); } else if((aa[0][4]/10==0 && aa[0][3]/10==3-p && aa[1][4]/10==3-p)) { r=0;c=4; } else if((aa[4][0]/10==0 && aa[4][1]/10==3-p && aa[3][0]/10==3-p)) { r=4;c=0; } else if((aa[4][4]/10==0 && aa[3][4]/10==3-p && aa[4][3]/10==3-p)) { r=4;c=4; } else if(aa[0][0]==0) {r=0;c=0; //printf("\ntrap2 : %d %d\n",r,c); } else if(aa[0][4]==0) { r=0;c=4; } else if(aa[4][0]==0) { r=4;c=0; } else if(aa[4][4]==0) { r=4;c=4; } else { for(k=0;k<9;k++) { ii=ia[k];jj=ja[k]; ////printf("^^\n%d\n%d\n",ii,jj); // if(aa[i][j]==0 && aa[i-1][j]/10==3-p && aa[i+1][j]/10==3-p && aa[i][j+1]/10==3-p && aa[i][j-1]/10==3-p) // { // r=i;c=j;f=1;break; // } if(aa[ii][jj]/10==p && aa[ii][jj]%10==3 && aa[ii-1][jj]/10==3-p && aa[ii+1][jj]/10==3-p && aa[ii][jj+1]/10==3-p && aa[ii][jj-1]/10==3-p) { r=ii;c=jj;f=1;break;//printf("1 : r:%d c:%d",r,c); } } if(ii==0 && jj>0 && jj<4 && aa[ii][jj]/10==p && aa[ii][jj]%10==2 && aa[ii][jj-1]/10==3-p && aa[ii][jj+1]/10==3-p && aa[ii+1][jj]/10==3-p ) { r=ii;c=jj;////printf("2 : r:%d c:%d",r,c); } else if(ii==4 && jj<4 && jj>0 && aa[ii][jj]/10==p && aa[ii][jj]%10==2 && aa[ii][jj+1]/10==3-p && aa[ii][jj-1]/10==3-p && aa[ii-1][jj]/10==3-p ) { r=ii;c=jj;////printf("3 : r:%d c:%d",r,c); } else if(jj==0 && ii>0 && ii<4 && aa[ii][jj]/10==p && aa[ii][jj]%10==2 && aa[ii-1][jj]/10==3-p && aa[ii+1][jj]/10==3-p && aa[ii][jj+1]/10==3-p ) { r=ii;c=jj;////printf("4 : r:%d c:%d",r,c); } else if(jj==4 && ii>0 && ii<4 && aa[ii][jj]/10==p && aa[ii][jj]%10==2 && aa[ii-1][jj]/10==3-p && aa[ii+1][jj]/10==3-p && aa[ii][jj-1]/10==3-p ) { r=ii;c=jj;////printf("5 : r:%d c:%d",r,c); } else if(ii==0 && jj==0 && aa[ii][jj]/10==p && aa[ii+1][jj]/10==3-p && aa[ii][jj+1]/10==3-p) { r=ii+1;c=jj;//printf("6 : r:%d c:%d",r,c); } else if(ii==0 && jj==4 && aa[ii][jj]/10==p && aa[ii+1][jj]/10==3-p && aa[ii-1][jj]/10==3-p) { r=ii+1;c=jj;////printf("7 : r:%d c:%d",r,c); } else if(ii==4 && jj==0 && aa[ii][jj]/10==p && aa[ii-1][jj]/10==3-p && aa[ii][jj+1]/10==3-p) { r=ii;c=jj+1;////printf("8 : r:%d c:%d",r,c); } else if(ii==4 && jj==4 && aa[ii][jj]/10==p && aa[ii-1][jj]/10==3-p && aa[ii][jj-1]/10==3-p) { r=ii-1;c=jj;////printf("9 : r:%d c:%d",r,c); } int var=0,balls=0;f=0;////printf("##\n"); //display(aa); for(k=0;k<9;k++) { ii=ia[k];jj=ja[k]; if(aa[ii][jj]/10==p && aa[ii][jj]%10==3) { //printf("\n!!r: %d c: %d\n",ii,jj); if(aa[ii][jj-1]/10==p) {var++; balls+=aa[ii][jj-1]%10;} if(aa[ii][jj+1]/10==p) {var++; balls+=aa[ii][jj+1]%10;} if(aa[ii-1][jj-1]/10==p) {var++; balls+=aa[ii-1][jj-1]%10;} if(aa[ii-1][jj+1]/10==p) {var++; balls+=aa[ii-1][jj+1]%10;} if(aa[ii-1][jj]/10==p) {var++; balls+=aa[ii-1][jj]%10;} if(aa[ii+1][jj-1]/10==p) {var++; balls+=aa[ii+1][jj-1]%10;} if(aa[ii+1][jj+1]/10==p) {var++; balls+=aa[ii+1][jj+1]%10;} if(aa[ii+1][jj]/10==p) {var++; balls+=aa[ii+1][jj]%10;} if(var>=3 && balls>=8) { r=ii;c=jj;f=1;//printf("14 : r:%d c:%d",r,c); break; } } } if(aa[0][0]/10==p && aa[0][1]/10==p && aa[1][0]/10==p && aa[0][1]%10==2 && aa[1][0]%10==2 && ((aa[1][1]!=0) || aa[2][0]/10!=0 || aa[0][2]/10!=0)) { r=ii;c=jj;//printf("10 : r:%d c:%d",r,c); } else if(aa[4][0]/10==p && aa[3][0]/10==p && aa[4][1]/10==p && aa[4][1]%10==2 && aa[3][0]%10==2 && ((aa[3][1]!=0) || aa[2][0]/10!=0 || aa[4][2]/10!=0)) { r=ii;c=jj;////printf("11 : r:%d c:%d",r,c); } else if(aa[4][4]/10==p && aa[4][3]/10==p && aa[3][4]/10==p && aa[3][4]%10==2 && aa[4][3]%10==2 && ((aa[3][3]!=0) || aa[2][4]/10!=0 || aa[4][2]/10!=0)) { r=ii;c=jj;////printf("12 : r:%d c:%d",r,c); } else if(aa[0][4]/10==p && aa[0][3]/10==p && aa[1][4]/10==p && aa[0][3]%10==2 && aa[1][4]%10==2 && ((aa[1][3]!=0) || aa[0][2]/10!=0 || aa[2][4]/10!=0)) { r=ii;c=jj;////printf("13 : r:%d c:%d",r,c); } //printf("\n####\n"); if(ii==0 && jj!=0 && jj!=4 && ((aa[ii][jj]%10>0 && aa[ii][jj]/10==p) || aa[ii][jj]==0)) { r=ii;jj=c;////printf("15 : r:%d c:%d",r,c); } else if(ii==4 && jj!=0 && jj!=4 && ((aa[ii][jj]%10>0 && aa[ii][jj]/10==p) || aa[ii][jj]==0)) { r=ii;jj=c;////printf("16 : r:%d c:%d",r,c); } else if(jj==4 && ii!=0 && ii!=4 && ((aa[ii][jj]%10>0 && aa[ii][jj]/10==p) || aa[ii][jj]==0)) { r=ii;jj=c;////printf("17 : r:%d c:%d",r,c); } else if(jj==0 && ii!=0 && ii!=4 && ((aa[ii][jj]%10>0 && aa[ii][jj]/10==p) || aa[ii][jj]==0)) { r=ii;jj=c;////printf("18 : r:%d c:%d",r,c); } //printf("\n@#\n"); for(k=0;k<9;k++) { ii=ia[k];jj=ja[k]; if(aa[ii][jj]/10==p && aa[ii][jj]%10>=1 && aa[ii-1][jj]/10==3-p && aa[ii-1][jj]%10!=3 && aa[ii+1][jj]/10==3-p && aa[ii+1][jj]%10!=3 && aa[ii][jj+1]/10==3-p && aa[ii][jj+1]%10!=3 && aa[ii][jj-1]/10==3-p && aa[ii][jj-1]%10!=3 ) { r=ii;c=jj;f=1;////printf("19 : r:%d c:%d",r,c); break; } } //printf("!!\n"); } printf("%d %d",r,c); exit(1); } if(i == 0 && j == 0) { if(M1[i][j]%10>2) M1[i][j]=pc*10+((M1[i][j]%10)-2); else M1[i][j] = 0; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; } else if(i == 0 && j == 4) { if(M1[i][j]%10>2) M1[i][j]=pc*10+((M1[i][j]%10)-2); else M1[i][j] = 0; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; } else if(i == 4 && j == 0) { if(M1[i][j]%10>2) M1[i][j]=pc*10+((M1[i][j]%10)-2); else M1[i][j] = 0; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; } else if(i == 4 && j == 4) { if(M1[i][j]%10>2) M1[i][j]=pc*10+((M1[i][j]%10)-2); else M1[i][j] = 0; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; } else if(j == 0) { if(M1[i][j]%10>3) M1[i][j]=pc*10+((M1[i][j]%10)-3); else M1[i][j] = 0; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; } else if(i == 0) { if(M1[i][j]%10>3) M1[i][j]=pc*10+((M1[i][j]%10)-3); else M1[i][j] = 0; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; } else if(j == 4) { if(M1[i][j]%10>3) M1[i][j]=pc*10+((M1[i][j]%10)-3); else M1[i][j] = 0; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; } else if(i == 4) { if(M1[i][j]%10>3) M1[i][j]=pc*10+((M1[i][j]%10)-3); else M1[i][j] = 0; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; } else { if(M1[i][j]%10>4) M1[i][j]=pc*10+((M1[i][j]%10)-4); else M1[i][j] = 0; M1[i][j-1]%=10; M1[i][j-1]= M1[i][j-1]+pc*10+1; M1[i][j+1]%=10; M1[i][j+1]= M1[i][j+1]+pc*10+1; M1[i+1][j]%=10; M1[i+1][j]= M1[i+1][j]+pc*10+1; M1[i-1][j]%=10; M1[i-1][j]= M1[i-1][j]+pc*10+1; } if(i == 0 && j == 0) { if(checkMat(M1,i+1,j) == 1) rec(M1,M2,i+1,j); if(checkMat(M1,i,j+1) == 1) rec(M1,M2,i,j+1); } else if(i == 0 && j == 4) { if(checkMat(M1,i+1,j) == 1) rec(M1,M2,i+1,j); if(checkMat(M1,i,j-1) == 1) rec(M1,M2,i,j-1); } else if(i == 4 && j == 0) { if(checkMat(M1,i-1,j) == 1) rec(M1,M2,i-1,j); if(checkMat(M1,i,j+1) == 1) rec(M1,M2,i,j+1); } else if(i == 4 && j == 4) { if(checkMat(M1,i-1,j) == 1) rec(M1,M2,i-1,j); if(checkMat(M1,i,j-1) == 1) rec(M1,M2,i,j-1); } else if(j == 0) { if(checkMat(M1,i-1,j) == 1) { rec(M1,M2,i-1,j);} if(checkMat(M1,i+1,j) == 1) { rec(M1,M2,i+1,j);} if(checkMat(M1,i,j+1) == 1) { rec(M1,M2,i,j+1);} } else if(i == 0) { if(checkMat(M1,i,j-1) == 1) { rec(M1,M2,i,j-1);} if(checkMat(M1,i,j+1) == 1) { rec(M1,M2,i,j+1);} if(checkMat(M1,i+1,j) == 1) { rec(M1,M2,i+1,j);} } else if(j == 4) { if(checkMat(M1,i,j-1) == 1) { rec(M1,M2,i,j-1);} if(checkMat(M1,i+1,j) == 1) { rec(M1,M2,i+1,j);} if(checkMat(M1,i-1,j) == 1) { rec(M1,M2,i-1,j);} } else if(i == 4) { if(checkMat(M1,i,j-1) == 1) { rec(M1,M2,i,j-1);} if(checkMat(M1,i,j+1) == 1) { rec(M1,M2,i,j+1);} if(checkMat(M1,i-1,j+1) == 1) { rec(M1,M2,i-1,j);} } else { if(checkMat(M1,i,j-1) == 1) { rec(M1,M2,i,j-1);} if(checkMat(M1,i,j+1) == 1) { rec(M1,M2,i,j+1);} if(checkMat(M1,i+1,j) == 1) { rec(M1,M2,i+1,j);} if(checkMat(M1,i-1,j) == 1) {rec(M1,M2,i-1,j);} } for(I = 0; I < 5; I++) { for(J=0;J<5;J++) M2[I][J] = M1[I][J]; } }
int main(){ //int a[5][5]={{11,12,12,0,0},{11,0,13,0,0},{0,0,0,0,22},{22,13,23,0,0},{0,21,0,0,21}}; /*int a[5][5] = {{11,0,12,21,21}, {11,23,13,23,11}, {11,21,23,11,11}, {22,0,23,12,11}, {12,21,22,11,21}}; */ int n=5,p,fl=0,r=0,c=0,i,j,count=0,count2=0,diff=-999,b,pli,plj,pl2,d,max,flg=0,k; //int a[5][5];//={{11,12,12,12,21},{12,11,11,13,0},{11,11,13,12,11},{11,13,13,12,0},{21,12,12,0,21}}; int a[5][5];//={{21,11,11,12,11},{12,12,11,12,12},{12,13,13,12,11},{11,13,0,12,12},{11,11,12,22,21}}; int M1[5][5], M2[5][5]; //Taking input matrix for(i=0;i<n;i++){ for( j=0;j<n;j++){ scanf("%d",&a[i][j]); } } //taking players-code //display(a); scanf("%d",&p); pc = p; /*while(flag){ r=rand()%5;//randomly placing output c=rand()%5; if(a[r][c]/10==p||a[r][c]/10==0)//check randomly generated box to be flag=0; } */ //count = //acquire(a,p); //b = checkMat(a,2,3); //rec(M1,M2,3,2); for(i = 0; i<5;i++) {//printf("\n-4: ***********\n"); for(j=0;j<5;j++) { if(a[i][j]/10!=p)continue; copy(M2,a);copy(aa,a);//printf("\n-1: i:%d j:%d r:%d c:%d\n",i,j,r,c); M2[i][j]%=10; M2[i][j]++; M2[i][j]+=(10*p); b=checkMat(M2,i,j); //printf("\nb:%d\n",b); if(b==1) {// //printf("\n-2: r:%d c:%d\n",r,c); rec(M2,M1,i,j);// printf("\n-2: r:%d c:%d\n",r,c); count=acquire(M1,3-p); if(count==0) { r=i;c=j;flg=1;//printf("\n-3: r:%d c:%d\n",r,c); } else if((count==1 || count==2 || count==3 ) && nz(M1)<10) { r=i;c=j;flg=1; } } } } ////printf("\n0: r:%d c:%d\n",r,c); if(a[0][0]/10==3-p && a[0][1]/10==p && a[1][0]/10==p && a[0][1]%10==2 ) { r=0;c=1;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[0][0]/10==3-p && a[1][0]/10==p && a[0][0]/10==p && a[1][0]%10==2 ) { r=1;c=0;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[0][4]/10==3-p && a[0][3]/10==p && a[1][4]/10==p && a[0][3]%10==2 ) { r=0;c=3;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[0][4]/10==3-p && a[0][3]/10==p && a[1][4]/10==p && a[1][4]%10==2 ) { r=1;c=4;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[4][0]/10==3-p && a[3][0]/10==p && a[4][1]/10==p && a[4][1]%10==2 ) { r=4;c=1;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[4][0]/10==3-p && a[3][0]/10==p && a[4][1]/10==p && a[3][0]%10==2 ) { r=3;c=0;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[4][4]/10==3-p && a[3][4]/10==p && a[4][3]/10==p && a[3][4]%10==2 ) { r=3;c=4;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if(a[4][4]/10==3-p && a[3][4]/10==p && a[4][3]/10==p && a[4][3]%10==2 ) { r=4;c=3;flg=1;////printf("\n1: r:%d c:%d\n",r,c);|| a[1][0]%2==0) } else if((a[0][0]/10==p && a[0][1]/10==3-p && a[1][0]/10==3-p && (a[0][1]%10==2 || a[1][0]%2==0))) { r=0;c=0;flg=1;//printf("\n-8: r:%d c:%d\n",r,c); } else if((a[0][4]/10==p && a[0][3]/10==3-p && a[1][4]/10==3-p && (a[1][4]%10==2 || a[0][3]%2==0))) { r=0;c=4;flg=1; ////printf("!!1"); } else if((a[4][0]/10==p && a[4][1]/10==3-p && a[3][0]/10==3-p && (a[4][1]%10==2 || a[3][0]%2==0))) { r=4;c=0;flg=1; } else if((a[4][4]/10==p && a[3][4]/10==3-p && a[4][3]/10==3-p && (a[3][4]%10==2 || a[4][3]%2==0))) { r=4;c=4;flg=1; } else if(a[0][0]/10==0 && a[0][1]/10==3-p && a[1][0]/10==3-p&& a[0][1]%10!=2 && a[1][0]%10!=2) { r=0;c=0;flg=1;//printf("\n1: r:%d c:%d\n",r,c); } else if((a[0][4]/10==0 && a[0][3]/10==3-p && a[1][4]/10==3-p) && a[0][3]%10!=2 && a[1][4]%10!=2) { r=0;c=4;flg=1;////printf("!!2"); } else if((a[4][0]/10==0 && a[4][1]/10==3-p && a[3][0]/10==3-p) && a[4][1]%10!=2 && a[3][0]%10!=2) { r=4;c=0;flg=1; } else if((a[4][4]/10==0 && a[3][4]/10==3-p && a[4][3]/10==3-p) && a[4][3]%10!=2 && a[3][4]%10!=2) { r=4;c=4;flg=1; } else if((a[0][0]/10==0 && (a[0][1]/10==3-p || a[1][0]/10==3-p))&& nz(a)>8 && a[0][1]%10!=2 && a[1][0]%10!=2) { r=0;c=0;flg=1;//printf("\n2: r:%d c:%d\n",r,c); } else if((a[0][4]/10==0 && (a[0][3]/10==3-p || a[1][4]/10==3-p))&& nz(a)>8 && a[0][3]%10!=2 && a[1][4]%10!=2) { r=0;c=4;flg=1;////printf("!!3"); } else if((a[4][0]/10==0 && (a[4][1]/10==3-p || a[3][0]/10==3-p))&& nz(a)>8 && a[4][1]%10!=2 && a[3][0]%10!=2) { r=4;c=0;flg=1; } else if((a[4][4]/10==0 && (a[3][4]/10==3-p || a[4][3]/10==3-p))&& nz(a)>8 && a[4][3]%10!=2 && a[3][4]%10!=2) { r=4;c=4;flg=1; } else if((a[0][1]/10==p && a[0][1]%10==2) && a[0][0]/10==3-p) { r=0;c=1;flg=1; } else if((a[1][0]/10==p && a[1][0]%10==2) && a[0][0]/10==3-p) { r=1;c=0;flg=1; } else if((a[4][1]/10==p && a[4][1]%10==2) && a[4][0]/10==3-p) { r=4;c=1;flg=1; } else if((a[3][0]/10==p && a[3][0]%10==2) && a[4][0]/10==3-p) { r=3;c=0;flg=1; } else if((a[3][4]/10==p && a[3][4]%10==2) && a[4][4]/10==3-p) { r=3;c=4;flg=1; } else if((a[4][3]/10==p && a[4][3]%10==2) && a[4][4]/10==3-p) { r=4;c=3;flg=1; } else if((a[0][3]/10==p && a[0][3]%10==2) && a[0][4]/10==3-p) { r=0;c=3;flg=1; } else if((a[1][4]/10==p && a[1][4]%10==2) && a[0][4]/10==3-p) { r=1;c=4;flg=1; } else if(a[0][0]==0&& nz(a)>8 && a[0][1]%10!=2 && a[1][0]%10!=2) {r=0;c=0;flg=1;//printf("\n3: r:%d c:%d\n",r,c); } else if(a[0][4]==0&& nz(a)>8 && a[0][3]%10!=2 && a[1][4]%10!=2) { r=0;c=4;flg=1;////printf("!!4"); } else if(a[4][0]==0&& nz(a)>8 && a[4][1]%10!=2 && a[3][0]%10!=2) { r=4;c=0;flg=1; } else if(a[4][4]==0&& nz(a)>8 && a[4][3]%10!=2 && a[3][4]%10!=2) { r=4;c=4;flg=1; } else if(a[0][0]!=0 && a[0][4]!=0 && a[4][0]!=0 && a[4][4]!=0 && a[2][2]/10!=3-p && nz(a)>10) { /* if((a[0][0]/10 == 3-p && a[0][1]/10==3-p && a[1][0]/10==3-p)) {r=1;c=1;flg=1;} else if (a[0][4]/10 == 3-p && a[0][3]/10==3-p && a[1][4]/10==3-p) { r = 3; c = 1; flg = 1;} else if(a[4][0]/10 == 3-p && a[3][0]/10==3-p && a[4][1]/10==3-p ) { r=3,c=1;flg=1; } else if(a[4][4]/10 == 3-p && a[4][3]/10==3-p && a[3][4]/10==3-p ) { r=3,c=3;flg=1; } else { */ r=2;c=2;flg=1; // } } if(flg==0){ max=-999;//printf("\nrec\n"); for(k=0;k<25;k++) { i=mati[k];j=matj[k]; copy(M2,a); d=M2[i][j];z=0;pl2 = 0; if((p==1 && (d != 21 && d != 22 && d != 23)) || (p==2 && (d != 11 && d != 12 && d != 13))) { if((a[0][0]==(p*10+1) && i==0 && j==0 && a[0][1]==0 && a[1][0]==0) || (a[0][4]==(p*10+1) && i==0 && j==4 && a[0][3]==0 && a[1][4]==0) ||(a[4][0]==(p*10+1) && i==4 && j==0 && a[4][1]==0 && a[0][3]==0)||(a[4][4]==(p*10+1) && i==4 && j==4 && a[4][3]==0 && a[3][4]==0)) continue; M2[i][j]%=10; M2[i][j]++; M2[i][j]+=(10*p); b=checkMat(M2,i,j); if(b==1) {copy(aa,a);rec(M2,M1,i,j); count=acquire(M1,p); count2=acquire(M1,3-p); if(count2==0) { r=i;c=j;fl=1;break; } } else { count=acquire(M2,p); count2=acquire(M2,3-p); if(count2==0) { r=i;c=j;fl=1;break; } } diff=count-count2; if(diff > max) { max = diff;r = i;c = j; } } } } printf("%d %d",r,c);//outputs your move }