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--
}
}
}
}
九宫格一共有多少4个相连的点?(C5H4)
最新推荐文章于 2024-05-22 15:31:56 发布