⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模式识别.c

📁 一个关于模式识别问题的很好的例子
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 int r1[50][50],r2[50][50],R1[51][50],R2[51][50],A[101][51],Y[51][100],
 i,j, count,length,breadth,n=1;


 void ready(int,int);
 void jisuan(int,int);
 int judge (int,int);
 

main()
{ clrscr();
  for (i=0;i<51;i++)
  A[0][i]=0;
   printf("\n");
   printf("please input the lenght of r(<=50)!\n");
	  scanf("%d",&length);
	  printf("now please input the breadth of r(<=50)!\n");
	  scanf("%d",&breadth);

	     printf("now enter r1, from left to right\n");
	      for (i=1;i<=breadth;i++)
	       { for (j=0;j<length;j++)
		 {
		   scanf("%d",&r1[i-1][j]);
		   R1[i][j]=r1[i-1][j];
		 }

		 if(i<breadth)
		 printf("enter next row!\n");
		}
		  for (i=0;i<length;i++)
		  R1[0][i]=1;


	     printf("now enter r2, from left to right\n");
	     for (i=1;i<=breadth;i++)
	       { for (j=0;j<length;j++)
		 {
		   scanf("%d",&r2[i-1][j]);
		   R2[i][j]=r2[i-1][j];
		 }
		 if(i<breadth)
		 printf("enter next row!\n");
	       }
		 for (i=0;i<length;i++)
		 R2[0][i]=1;


		 breadth=breadth+1;


	   ready(length,breadth);
	  jisuan(length,breadth);
	   printf("\n\n\n");

   if(judge(length,breadth))
   { printf("the consequence is:\n");
      for (i=0;i<breadth;i++)

      {  for (j=1;j<=length*2;j++)

	    {	if(A[j][i]>=0)
		 { printf(" ");
		   printf("%d ",A[j][i]);
		 }
		else
		printf("%d ",A[j][i]);
	    }

	 printf("\n");
      }
       printf("\n\n");

       printf("at last A is:\n");
       for (i=0;i<breadth;i++)
       printf("%d ",A[1][i]);

      return;
    }




    else
  {
    while (!judge(length,breadth))
   {    for(i=0;i<breadth;i++)
       A[0][i]=A[length*2][i];

       jisuan(length,breadth);

      if(judge(length,breadth))
   { printf("the consequence is:\n");
      for (i=0;i<breadth;i++)

      {  for (j=1;j<=length*2;j++)

	    {	if(A[j][i]>=0)
		 { printf(" ");
		   printf("%d ",A[j][i]);
		 }
		else
		printf("%d ",A[j][i]);
	    }

	 printf("\n");
      }
       printf("\n\n");

       printf("at last A is:\n");
       for (i=0;i<breadth;i++)
       printf("%d ",A[1][i]);

      return;
    }

       n++;
       if(n>=1000)break;
   }


  }
    printf("have no answer !\n");
    return ;
  }





	      void ready(int l,int b)
	      {

		  for(j=0;j<l*2;j++)
		 for (i=0;i<b;i++)
		{ if (j<l)
		  Y[i][j]=R1[i][j];
		  else
		  Y[i][j]=R2[i][j-l];
		}
	      }


     void jisuan(int l,int b)
   {
     for(j=0;j<2*l;j++)
     {  count=0;

	for(i=0;i<b;i++)
	count=count+Y[i][j]*A[j][i];
   //	printf("(");
	if(j<l)
	{ if (count<=0)
	  for(i=0;i<b;i++)
	  A[j+1][i]=A[j][i]+Y[i][j];
	  else
	  for(i=0;i<b;i++)
	  A[j+1][i]=A[j][i];
	 }

	else
	{ if (count>=0)
	  for(i=0;i<b;i++)
	  A[j+1][i]=A[j][i]-Y[i][j];
	  else
	  for(i=0;i<b;i++)
	  A[j+1][i]=A[j][i];
	}

      }

     }


	int judge (int l,int b)
      {  j=1;
	 while (j<2*l)
	 { for (i=0;i<b;i++)
	   if(A[j][i]!=A[j+1][i])
	   return 0;
	   j++;
	 }
	 return 1;
       }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -