哪位高手能写下代码,小弟我想参考一下

谁能写下代码,我想参考一下
老伯伯拿着鱼,带狗.猫过河到对岸.   有一条船.   只能坐一个人.老伯每次只能带一样动物过河.   当老伯不在的时侯

狗会咬猫.猫会吃鱼.   请问怎么顺序过河呢? 请写出流程图. 最好附上代码
------------------------------------
建立了一个矩阵:0--狗,1---猫,2---鱼,矩阵元素为1表示两种动物不能相处,为0表示可以相处
          狗     猫     鱼
狗       0         1         0
猫       1         0         1
鱼       0         1         0


------解决方案--------------------
#include <iostream>
#include <string>
using namespace std;

enum {
DOG=0,
CAT,
FISH
};

int preference[3]= {0, 0, 0};


void InitArray(short (*a)[3]){
for(int ix=0; ix <3; ix++)
for(int iy=0; iy <3; iy++){
*(*(a+ix)+iy)= ((ix==1) || (iy==1)) ? 1 : 0;
}
a[1][1]=0;
}

bool *(short *p, short (*a)[3]){
int x=0, y=0, time =0;
for(int ix=0; ix <3; ix++){
if(p[ix]){
time++;
((time==1) ? x : y )= ix;
}
}
if(time==1)
return false;
else
return (a[x][y] ) ? true : false;
}


void print(short *i, short *b){
string name[3]={ "dog ", "cat ", "fish "};

for(int ix=0; ix <3; ix++){
cout < <(i[ix] ? name[ix] : " ")
< < "\t --------- ---------\t "
< <(b[ix] ? name[ix] : " ") < <endl;
}
cout < <endl;
}


int findfirst(short *p){
int result=0, first=100;
for(int ix=0; ix <3; ix++){
if(p[ix]){
if(first==100){
first = preference[ix];
result = ix;
}
else if(first > preference[ix]){
first = preference[ix];
result = ix;
}
}
}
return result;
}


bool solve(short *i, short *b, short (*a)[3]){
bool loc = true;
while(i[0] || i[1] || i[2]){
if(loc){
int ix= findfirst(i);
if(i[ix]){
i[ix]=0, b[ix]=1;
preference[ix]++;
if(*(i, a)){
i[ix]=1, b[ix]=0;
}else{
loc=false;
print(i,b);
}
}
}
else{
int ix= findfirst(b);
if(b[ix]){
if(*(b, a)){
preference[ix]++;
b[ix]=0, i[ix]=1;
}else{
loc=true;
}
}
}
}
return true;
}


int main(){
short relate[3][3]; //relate talbe
short init_relate[3]={1, 1, 1};
short bank_relate[3]={0, 0, 0};


InitArray(relate); //initial matrix

solve(init_relate, bank_relate, relate);

cout < < "ok! " < <endl;

return 0;
}
自己动手写了一个,望大家批评指出....^_^