题目转载自 July
答案解法转载自 Hack http://blog.csdn.net/hackbuteer1/article/details/7462447
7、随机分配座位,共50个学生,使学号相邻的同学座位不能相邻(早些时候用C#写的,没有用C改写)。
void perm(int *a,int len,int idx,std::vector<int> col)
{
if(idx==len)
{
for(int i=0;i<len-1;i++)
{
if(a[i+1]-a[i]==1||a[i]-a[i+1]==1)
return;
}
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
for(int i=idx;i<len;i++)
{
swap(a[i],a[idx]);
perm(a,len,idx+1,col);
swap(a[i],a[idx]);
}
}
int main()
{
int a[]={1,2,3,4,5};
std::vector<int> col;
perm(a,sizeof(a)/sizeof(int),0,col);
return 0;
}