九宫格一共有多少4个相连的点?(C5H4)

BEGIN{
bar=1
for(i=1;i<=7;i++)
 { for(j=1;j<=7;j++)
    { if(map[m,n]!=0)
       printf "NR=14 m= %d,n= %d,map=%s  ts=%s\n"
    }
 }
e=12  #edge  *#边的个数*
v=9   #spot  *#点的个数*
#start=1
end=9  #好像是用不到的一个变量
count=1
num_sort=1

if(bar=2)  #就是赋值=
 { for (i = 1; i <= v; ++i)    ###初始化
    { num[i]=1
      for (j = 1; j <= v; ++j)
       map[i,j] = 0;
    }
 }
#边的信息
map[1,2] = 1;
map[1,4] = 1;
map[2,3] = 1;
map[2,5] = 1;
map[3,6] = 1;
map[4,5] = 1;
map[4,7] = 1;
map[5,6] = 1;
map[5,8] = 1;
map[6,9] = 1;
map[7,8] = 1;
map[8,9] = 1;

for (i = 1; i <= v; i++)
 { for (j = 1; j <= v; j++)
    { if (map[i,j] != 0)
       map[j,i] = map[i,j];
    }
 }
for(start=1;start<=v;start++)
 { f(start,2)
  # printf "NR=58 num=%d\n",num
   if(start==v)   #### end circle
    { for(i1=1;i1<=v;i1++)
       { for(i=1;i<num[i1];i++)
          { printf("%d:",i)
            for(j1=1;j1<=4;j1++)
             printf("%d ",d[i1,i,j1])
            printf("\n")
          }
       }
    }
 }


######### 1. start :sort ################  *#(先排序)*
printf"########  After sort  ########\n\n\n"
for(i=1;i<=v;i++)
 { for(j=1;j<=num[i];j++)
    { for(k=1;k<=4;k++)
       d1[i,j,k]=d[i,j,k]    *#将数组d赋值给的d1,对数组d1进行组内排序,后期进行比较*
    }
   for(j=1;j<=num[i];j++)
    { for(k=1;k<4;k++)
       { for(k1=k+1;k1<=4;k1++)
          { if(d1[i,j,k]>d1[i,j,k1])   *#冒泡*
             { tem=d1[i,j,k]
               d1[i,j,k]=d1[i,j,k1]
               d1[i,j,k1]=tem
             }
          }
       }
    }
 }
if(bar==2)
 { for(i=1;i<=v;i++)
    { printf "NR=114 After sort for all sets of point-%d: %d sets\n",i,num[i]-1
      for(j=1;j<num[i];j++)
       { for(k=1;k<4;k++)
          printf "%d-",d1[i,j,k]
         printf "%d\n",d1[i,j,4]
       }
    }
 }

######## 2. start: compare && duplicate removal  ##############
printf"\n\n\n########  After compare && duplicate removal  ########\n\n\n"
*###比较一下去重,d2是去重后的d1,unique是去重后的d,是最终原始数组*
for(i=1;i<=v;i++)
 { num1[i]=0    ######  num1[i]  is after_duplicate removal__num[i]
   for(k=1;k<=4;k++)
    d2[i,num1[i],k]="NA"
   for(j=1;j<num[i];j++)
    { if(j==1)
       k_start=0
      else
       k_start=1
      count1=0
      for(i1=1;i1<=i;i1++)
       { for(k=k_start;k<=num1[i1];k++)
          { count=0
            for(k1=1;k1<=4;k1++)
             { if(d1[i,j,k1]!=d2[i1,k,k1])
                { count++ # count>0 means different
                  break
                }
             }
            if(count==0)
             { count1++ # count1>0 means same between i and k
               break
             }
          }
       }
      if(count1==0)   ### different
       { num1[i]++    ### num_different_array ++
         for(k=1;k<=4;k++)
          { d2[i,num1[i],k]=d1[i,j,k]  #  reference sort_array --> d2[,,]
            unique[i,num1[i],k]=d[i,j,k]
          }
       }

     }

 }
if(bar==2)
 { for(i=1;i<=v;i++)
    { printf "NR=150 After uniq for all sets of point-%d: %d sets\n",i,num1[i]
      for(j=1;j<=num1[i];j++)
       { for(k=1;k<4;k++)
          printf "%d-",d2[i,j,k]
         printf "%d\n",d2[i,j,4]
       }
      printf "NR=164 After uniq for all sets of initial point-%d: %d sets\n",i,num1[
i]
      for(j=1;j<=num1[i];j++)
       { for(k=1;k<4;k++)
          printf "%d-",unique[i,j,k]
         printf "%d\n",unique[i,j,4]
       }

    }
 }



}

{

}
END{

}
function f(n,len,i,k){   *#最有价值的部分,暑假写的,现在都忘记咋写的了*
b[1]=start
if(len==5)  *#跳出条件*  *len==5就是选取点的长度为4,可以定义个变量,指定长度,直接len==(指定长度+1)*
 { y=1
   for(i=1;i<len;i++)
    {# printf("  b[%d]=%d ",i,b[i])
      d[start,num[start],y++]=b[i]
    }
   num[start]++
 }

else
 { for(i=1;i<=v;i++)
    { k=1
      while(k<len && map[n,i]!=0)
       { if(b[k]==i)
          break
         else
          k++
       }
      if(k==len)
       { b[len++]=i
         f(i,len)
         len--
       }
    }
 }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟的成长笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值