コード例 #1
0
ファイル: reorder_tnd.c プロジェクト: evatux/kaa
void do_mult(TMatrix_DCSR *A, int **_xadj, int **adjncy)
{
    int size = A->size;
    int total = 0;
    int *a;
    int *xadj = (int*)malloc(sizeof(int)*(size+1));
    if (!xadj)
        PRINT_ERROR_MESSAGE_AND_EXIT(ERROR_MEMORY_ALLOCATION);
    *_xadj = xadj;
    xadj[0] = 0;

    for (int step = 0; step <= 1; ++step)
    {
        if (step == 1)
        {
            a = (int*)malloc(sizeof(int)*total);
            if (!a) PRINT_ERROR_MESSAGE_AND_EXIT(ERROR_MEMORY_ALLOCATION);
            *adjncy = a;
        }

        for (int i = 0; i < size; ++i)
        {
            int cur = 0;
            for (int j = 0; j < size; ++j)
            {
                if (i == j) continue;

                int is_there = 0;
                for (int ci = A->row_ptr[i]; ci < A->row_ptr[i+1]; ++ci)
                {
                    int cur_col = A->col_ind[ci];
                    if (in_row(A,j,cur_col)) {
                        is_there = 1;
                        break;
                    }
                }

                if (!is_there && in_row(A,j,i)) is_there = 1;

                if (is_there) {
                    if (step == 1) a[xadj[i] + cur] = j;
                    cur++;
                }
            }

            if (step == 0)
            {
                total += cur;
                xadj[i+1] = total;
            }
        }
    }
}
コード例 #2
0
ファイル: reorder_tnd.c プロジェクト: evatux/kaa
void do_orig(TMatrix_DCSR *A, int **_xadj, int **adjncy)
{
    int size = A->size;
    int total = 0;
    int *a;
    int *xadj = (int*)malloc(sizeof(int)*(size+1));
    if (!xadj)
        PRINT_ERROR_MESSAGE_AND_EXIT(ERROR_MEMORY_ALLOCATION);
    *_xadj = xadj;

    for (int step = 0; step <= 1; ++step)
    {
        if (step == 0) xadj[0] = total;
        if (step == 1)
        {
            a = (int*)malloc(sizeof(int)*total);
            if (!a) PRINT_ERROR_MESSAGE_AND_EXIT(ERROR_MEMORY_ALLOCATION);
            *adjncy = a;
        }

        for (int i = 0; i < size; ++i)
        {
            int cur = A->row_ptr[i+1] - A->row_ptr[i];

            // copy cur elements
            if (step == 1)
                for (int j = A->row_ptr[i]; j < A->row_ptr[i+1]; ++j)
                    a[xadj[i]+(j-A->row_ptr[i])] = A->col_ind[j];

            for (int j = 0; j < size; ++j)
            {
                if (!in_row(A,i,j) && in_row(A,j,i))
                {
                    if (step == 1) a[xadj[i] + cur] = j;
                    cur++;
                }
            }

            if (step == 0)
            {
                total += cur;
                xadj[i+1] = total;
            }
        }
    }

    for (int i = 0; i < size; ++i)
        qsort(&a[xadj[i]], xadj[i+1] - xadj[i], sizeof(int), compare);
}
コード例 #3
0
void main()
{
	clrscr();
	char pwd[]="bigmanani";
	char ans[20];
	cout<<"Enter password : "******"*";
		}
		else break;
	}
	if(strcmp(ans,pwd))
	{
		cout<<"\nIncorrect password.";
		getch();
		exit(0);
	}



	int op;
	clrscr();
	fout<<"main\n";
	ifstream fin("sdk.txt");
	// cout<<"Enter the puzzle row-wise (Use 0's for empty spaces) :\n";
	for(int i=0;i<=8;++i)
	for(int j=0;j<=8;++j)
	{
	  fin>>space[i][j].value;
	  if(space[i][j].value==0)
	  {
		for(int k=1;k<=9;++k)
			space[i][j].poss[k]=1;
	  }
	  else
	  {
		for(int k=1;k<=9;++k)
		{
			if(k!=space[i][j].value)
				space[i][j].poss[k]=0;
			else
				space[i][j].poss[k]=1;
		}
	  }
	}
	cout<<"Puzzle accepted. Starting Evaluation.\n";  //getch();
	for(int e=1;;++e)
	{
		fout<<"Starting Evaluation "<<e<<"\n";  // getch();
		for(i=0;i<=8;++i)
		{
			for(j=0;j<=8;++j)
			{
				int nop=0;
				cell_one_pos(i,j);
				int the_poss_val=0;
				cout<<"Evaluating space "<<i<<" "<<j<<"\n"; //getch();
				if(space[i][j].value!=0)  // already filled
				{
				   cout<<"space "<<i<<" "<<j<<" is already filled.\n";//getch();
				   continue;
				}
				else cout<<"space "<<i<<" "<<j<<" is empty\n";//getch();
				for(int k=1;k<=9;++k)
				{
					cout<<"Trying value "<<k<<"\n"; //getch ();
					if(!in_col(j,k)&&!in_row(i,k)&&!in_box(i,j,k))       //   check conds
					{
						nop++;
						cout<<k<<" is a possible value.\n";  //getch();
						space[i][j].poss[k]=1;
						the_poss_val=k;
					}

					else if(in_col(j,k)||in_row(i,k)||in_box(i,j,k))
					{
						space[i][j].poss[k]=0;
						cout<<k<<" is not a possible value\n"; // getch();
					}

				}
				if(nop==1)
					{	space[i][j].value=the_poss_val;
						cout<<i<<" "<<j<<" ="<<the_poss_val<<"\n";// getch();
						boxes_filled++;

						for(int d=1;d<=9;d++)
						{
							if(d!=the_poss_val)
								space[i][j].poss[d]=0;
						}
					}
			}
		}
		elim(0,0);elim(0,3);elim(0,6);
		elim(3,0);elim(3,3);elim(3,6);
		elim(6,0);elim(6,3);elim(6,6);
		rem_lin_pos(1133);rem_lin_pos(4769);
		rem_lin_pos(1436);rem_lin_pos(7193);
		rem_lin_pos(1739);rem_lin_pos(7496);
		rem_lin_pos(4163);rem_lin_pos(7799);
		rem_lin_pos(4466);
		cout<<"\nEvaluation "<<e<<" finished. A total of "<<boxes_filled<<" spaces have now been filled.\n";
		Menu :
		cout<<"\n1.View the puzzle solved this far.\n";
		cout<<"2.Continue Evaluation.\n";
		cout<<"3.View the possibilities of a space. [row col]\n";
		cout<<"4.Exit Program.\n";
		cout<<"6.Elimination\n";
		cout<<"7.Set Value. [row col val]\n";
		cout<<"Choose an Option : ";
		cin>>op;
		if(op==1)
		{
			for(i=0;i<=8;++i)
			{
				for(j=0;j<=8;++j)
				{
					//if(space[i][j].value!=0)
						cout<<" "<<space[i][j].value;
				  /*	else
					{
						cout<<" {";
						for(int g=1;g<=9;++g)
						{
							if(space[i][j].poss[g])
							  cout<<g;
						}
						cout<<"}";
					}                        */
				}
				cout<<"\n";
			}
		}
		if(op==2)
		{
			unfilled();
			continue;

		}
		if(op==3)
		{
			int i,j;
			cin>>i>>j;
			cout<<"Possibilities are : ";
			for(int k=1;k<=9;++k)
			{
				if(space[i][j].poss[k]==1)
					cout<<k<<" ";
			}
		}
		if(op==4)
			exit(0);
		if(op==5)
		{
			cout<<"Enter BIN : ";
			int bin;
			cin>>bin;
			double_down(bin);
		}