(原)銀行家演算法C++實現

來源:互聯網
上載者:User

      雖然這是一個作業系統的用來避免死結的演算法,其實完全可以把它當做一道ACM題來做。尋找安全序列上面我使用了回溯演算法,條例還算清晰,發上來和大家共用同時備忘。

     

#include<iostream>
using namespace std;
#include<fstream>
#include<cstdlib>
int available[3] = {3,3,2}; //available矩陣
int allocation[5][3] = {0}; //allocation矩陣
int maxN[5][3] = {0};       //max矩陣
int need[5][3] = {0};       //need矩陣
int p[5] = {0};
int request[5] = {0};       //request序列
bool record[5] = {0};       //record用於記錄找過的進程
bool judge( int );          //判斷目前狀態是否死結的函數

這裡只列出判斷函數judge(int v)的定義,main函數就不寫了,該咋寫咋寫吧。

bool judge( int v )                //判斷是否會產生死結的函數,用回溯演算法
{
     if( v >= 5 )                    //參數v表示當前正在找第v個合格進程,
             return true;             //能找完,表明存在安全序列 ,返回真
     for( int k = 0;k < 5;k++ )
     {
              if( !record[k] && need[k][0] <= available[0] && need[k][1] <= available[1] && need[k][2] <= available[2] )
              {
                  cout<<"Select Process "<<k<<endl;//找到一個符合當前條件的進程
                  record[k] = true;                //假定是真確的,往下執行
                  for( int j = 0;j < 3;j++ )
                      available[j] += allocation[k][j];
                  cout<<"avilable:";
                  for( int l = 0;l < 3;l++ )
                       cout<<available[l]<<" ";
                  cout<<endl;
                  if( judge( v+1 ) )           //判斷執行這一步後結果是否為真
                  {
                      p[v] = k;                //是的話,記錄路徑
                      return true;          
                  }
                  else
                  {
                      cout<<"This selection is wrong, back.\n";
                      record[k] = false;       //若不是,還原作業,往下尋找
                      for( int i = 0;i < 3;i++ )
                      available[i] -= allocation[k][i];
                  }
                 
              }
     }
     return false;                   //沒有合格進程,則返回假沒有安全序列

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.