陣列解決約瑟夫環問題

love_gg發表於2012-09-14

  我用的-1,-2作為標緻,前提就是輸入的陣列中沒有-1,-2。如果有這樣的數,那的該用其他作為區分的標緻。之前我一直一起需要刪除已經取出的資料,這樣涉及到陣列的移動,比較耗時,後來發現不需要,只需要改變標緻即可。程式碼如下:

//約瑟夫環問題
//p存放的是標號,n是總的數目,從k開始數,數到m的出列,result存放的結果
void josephus(int p[],int n,int k,int m,int result[])
{
	int *data=new int[n+1];
	for(int i=0;i<n;i++)
		data[i]=p[i];
	data[n]=-1;
	int index=0,count=0;
	for(int j=k-1;index<n;j++)
	{
		if(data[j]==-1)
			j=0;
		if(data[j]!=-1&&data[j]!=-2)
			count++;
		if(count==m)
		{
			result[index]=data[j];
			index++;
			count=0;
			data[j]=-2;
		}
	}
}


相關文章