C语言问题.. 很急!很急! 加高分..

来源:百度知道 编辑:UC知道 时间:2024/05/04 19:26:09
一人带着一只羊,一条狼.一颗白菜想过河,假设他每次只能带一只羊或者一条狼或者一颗白菜过河,并限定人不在场时,狼和羊,或羊和白菜不能单独在一起,并编写程序求出他带一只羊,一条狼和一颗白菜过河的方法
1:将各功能模块进行分解,形成程序结构图
2:程序流程图及详细说明
3:重要源代码及其说明
4:软件的功能,界面,使用方法及改进意见等的详细介绍

给出一种方法如下,已带思路说明,程序在vs2005和dev-cpp下编译通过:
/*
分析: 用数组a[3],b[3]表示两岸,a[0]与b[0]表示青菜,a[1]与b[1]表示羊,a[2]与b[2]表示狼,元素值为0则空,元素值为1表示存在.由a岸到b岸,初始 a[0]=1,a[1]=1,a[2]=1,b[0]=0,b[1]=0,b[2]=0,当 b[0]=1,b[1]=1,b[2]=1,a[0]=0,a[1]=0,a[2]=0时则成功渡过河.摆渡时
1.应避免东西被吃;
2.每次刚带来的东西不能马上再带回到对岸;
3.优先尝试由b岸到a岸空船.
*/
#include <stdio.h>
#include <stdlib.h>

int check(int arr[]) /*判断是否有东西被吃*/
{ if ( (arr[0]==1 && arr[1]==1 && arr[2]==0)
|| (arr[0]==0 && arr[1]==1 && arr[2]==1) )
return 0;
else
return 1;
}

void prnstatus(int ar[], int br[], char str[][3]) /*打印两岸状况*/
{ int i;
printf(" ( a岸现有:");
for (i=0;i<3;i++)
if (ar[i])
printf("%s ",str[i]);
printf(". b岸现有:");
for (i=0;i<3;i++)
if (br[i])
printf("%s ",str[i]);
printf(")\n");
}

int main()