//我有一列数1,2,3,4,5,6,7,8,9要实现全排序。要求1在2,3,4的左边,2在5,6的左边,3在6的左边,4在7的左边,5,6,7在8的左边,8在9的左边。其它的数位置随意,(如:1,4,2,3,5,7,6,8,9)怎么实现几个数字的全排序。
#include "stdio.h"
int F_PRINT(int *map,int len)
{
for (int i=1;i<=len;++i)
{
printf("%d ",map[i]);
}
printf("\n");
return 0;
}
bool F_Rule_Check(int *map,int len,int left,int right)
{
for (int i=1;i<=len;++i)
{
if (map[i]==left)
{
return true;
}
if (map[i]==right)
{
return false;
}
}
return false;
}
bool F_Filter_Diff(int *map,int len)
{
for (int i=1;i<len;++i)
{
for (int j=i+1;j<=len;++j)
{
if (map[j]==0)
{
continue;
}
if (map[i]==map[j])
{
return false;
}
}
}
return true;
}
bool F_Filter_Rule(int *map,int len)
{
return
F_Rule_Check(map,len,1,2)&&
F_Rule_Check(map,len,1,3)&&
F_Rule_Check(map,len,1,4)&&
F_Rule_Check(map,len,2,5)&&
F_Rule_Check(map,len,2,6)&&
F_Rule_Check(map,len,3,6)&&
F_Rule_Check(map,len,4,7)&&
F_Rule_Check(map,len,5,8)&&
F_Rule_Check(map,len,6,8)&&
F_Rule_Check(map,len,7,8)&&
F_Rule_Check(map,len,8,9);
}
int F_Arrange(int *map,int len,int loc)
{
if (!F_Filter_Diff(map,len))
{
return 1;
}
if (loc>len&&F_Filter_Diff(map,len))
{
if (F_Filter_Rule(map,len))
{
return F_PRINT(map,len);
}
else return 1;
}
for (int i=1;i<=len;++i)
{
map[loc]=i;
F_Arrange(map,len,loc+1);
map[loc]=0;
}
return 0;
}
int main()
{
int map[10]={0};
F_Arrange(map,9,1);
return 0;
}
按rule全排列数字筛选(0-1背包)
最新推荐文章于 2023-12-21 22:39:31 发布