C/C++ code#include
using namespace std;
const int M = 3;
const int N = 5;
int Ava[M] = {3, 3, 2};
int All[N][M] = {{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int Nee[N][M] = {{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
int work[N+1][M] = {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
int flag[N][2] = {{0,0},{0,0},{0,0},{0,0},{0,0}};
int count = 0;
void Safe(int num);
int main()
{
int num = 0;
for (int k = 0; k < M; ++k)
{
work[num][k] = Ava[k];
}
Safe(num);
cout < < "total: " < < count;
system("pause");
return 0;
}
void Safe(int num)
{
if (num == N)
{
count++;
for (int m = 0; m < N; ++m)
{
cout < < flag[m][1] < < " ";
}
cout < < endl;
}
else
{ for (int i = 0; i < N; ++i)
{
if (!flag[i][0])
{
int j = 0;
for (; j < M; ++j)
{
if (work[num][j] < Nee[i][j])
break;
}
if (j == 3)//有一个进程符合安全
{
flag[i][0] = 1;
flag[num][1] = i;
for (int k = 0; k < M; ++k)
{
work[num+1][k] = work[num][k] + All[i][k];
}
Safe(num+1);
}
}
}
flag[flag[num][1]][0] = 0;
flag[flag[num-1][1]][0] = 0;
for (int n = 0; n < M; ++n)
work[num][n] = 0;
}
}