| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:高手请进,求指导,算法
只看楼主 加入收藏
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
高手请进,求指导,算法
程序代码:
#include<stdio.h>

int available[3]={3,3,2};
int request[5][3]={0};
int max[5][3]={
        {7,5,3},
        {3,2,2},
        {9,0,2},
        {2,2,2},
        {4,3,3,}};
int allocation[5][3]={
        {0,1,1},
        {2,0,0},
        {3,0,2},
        {2,1,1},
        {0,0,2}};
int need[5][3];
int m;
char c;

void init();
void requestf();
int safe();
int judge();

int main(int argc,char *argv[])
{

    while(1)
    {
        init();
        requestf();
        if(!judge())
            return 0;
        if(!safe())
            return 0;
        printf("是否继续Y/N!");
        scanf("%c",&c);
        if(c=='Y'||c=='y')
            continue;
        else
            return 1;
    }
}

void init()
{
    int i,j;
/*    available[3]={3,3,2};
    request[5][3]={0};
    max[5][3]={
        {7,5,3},
        {3,2,2},
        {9,0,2},
        {2,2,2},
        {4,3,3,}};
    allocation[5][3]={
        {0,1,1},
        {2,0,0},
        {3,0,2},
        {2,1,1},
        {0,0,2}};*/
    for(i=0;i<5;i++)
        for(j=0;j<3;j++)
            need[i][j]=max[i][j]-allocation[i][j];
}

void requestf()
{
    int k;
    printf("请输入你要申请资源的进程\n");
    scanf("%d",&m);

    printf("请输入各资源请求的数量\n");
    for(k=0;k<3;k++)
        scanf("%d",&request[m][k]);
}

int judge()
{
    int i;
    for(i=0;i<3;i++)
        if(request[m][i]>need[m][i] || request[m][i]>available[i])
        {
           printf("请求的资源超过可利用的资源!");
           printf("是否继续Y/N!");
        scanf("%c",&c);
           return 0;
        }
    for(i=0;i<3;i++)
    {
        if(request[m][i]<=need[m][i] && request[m][i]<=available[i])
        {
            available[i]-=request[m][i];
            allocation[m][i]+=request[m][i];
            need[m][i]-=request[m][i];
        }
        else
        {
           printf("请求的资源超过可利用的资源!");
           printf("是否继续Y/N!");
           printf("所需要的资源不够,进程%d wait....",m);
              return 0;
        }
    }
return 1;
}

int safe()
{
    int i,j,l;
    int work[3];
    int finish[5]={0};
    int order[5];

    for(i=0;i<3;i++)
        work[i]=available[i];

    for(i=0;i<5;i++)
    {
        if(1==finish[i])
            continue;
        else
        {
            for(j=0;j<3;j++)
                if(need[i][j]>work[j])
                    break;
                if(j==3)
                {
                    work[j]+=allocation[i][j];
                    finish[i]=1;
                    order[l++]=i;
                    i=-1;
                }
                else
                    continue;
        }
    }
    if(l==5)
    {
        printf("安全序列为:\n");
        for(i=0;i<5;i++)
            printf("%d",order[i]);
    }
    return 1;
}
            
此为银行家算法 运行过程中有时会崩溃,求大侠看看
2011-10-26 23:22
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:4 
仅供参考:http://wenwen.
2011-10-27 00:11
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:6 
图片附件: 游客没有浏览图片的权限,请 登录注册

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-10-27 00:18
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
楼上的可以具体点么 不懂你的什么意思
2011-10-27 07:10
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:10 
自家的副作用

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-10-27 11:26
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
具体点可以不
2011-10-27 21:11
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
回复 5楼 A13433758072
自加吧?
2011-10-28 23:35
快速回复:高手请进,求指导,算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024898 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved