想請教一下我這個找全部安全序列的dfs演算法是有什么問題嗎,為什么最后輸出多個安全序列但并不是全部的?
void Safe(int k)
{
int i, j;
int flag;
if (k == num_p) //找到了一種安全性序列,列印輸出
{
count++;
if (count == 1) printf("當前系統安全!\n");
printf("第%d個安全序列: ", count);
for (i = 0; i < num_p; i++)
{
printf("P%d ",S->record[i]);
}
printf("\n");
return;
}
for (i = 0; i < num_p; i++)
{
if (Finish[i]==false)
{
flag = true;
for (j = 0; j < num_s; j++)
{
if (Need[i][j] > Work[j])//如果不能滿足當前行程的需求
flag = false;
}
if (flag==true)//如果能滿足當前行程的需求,暫時放入安全性佇列
{
for (j = 0; j < num_s; j++)
{
Work[j] += Allocation[i][j];
}
Finish[i] = true;
S->top++;
S->record[S->top] = i;
Safe(k + 1);//搜索下一個
S->top--; //溯回出堆疊,恢復剛剛放進去的行程
for (j = 0; j < num_s; j++)
{
Work[j] -= Allocation[i][j];
}
Finish[i] = false;//恢復
}
}
}
}
附上我的測驗資料和輸出結果:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75971.html
標籤:C語言
上一篇:thrift怎么在windows環境下,C++傳輸圖片,求具體代碼
下一篇:關于字串的問題
