/是否安全Р {Р flag2=1;//1表示没有死循环Р while (t!=p)//保证不会出现循环Р {Р if(tem.xds== t->data.xds&&tem.yr==t->data.yr&&tem.cw==t->data.cw)Р {//出现相当情况时候Р flag2=0;Р break; Р }Р t=t->par;Р }Р if(flag2==1)Р {Р if (flag1==0) {Р insertson(q, tem);Р flag1=1;Р }Р else Р insertbro(q,tem); Р if (tem.xds==0&&tem.yr==0&&tem.cw==0)Р {Р print(q,p);Р count++;Р }Р } Р } Р } Р q=q->next;Р } Р if (count==0)Р printf("无法成功渡河!\n");Р elseР printf("有%d种渡河方式。\n",count);Р}Р Рint main()Р{Р int n,c,back;Р?Link *p;Р DataType tem;Р while (back)Р {Р printf("请输入修道士与野人的人数n:\n");Р scanf("%d",&n);Р if (n==0)Р break;Р printf("请输入船可容纳的人数c:\n");Р scanf("%d",&c);Р tem.xds=n;Р tem.yr=n;Р tem.cw=1;Р Linkinit(&p); //初始化邻接表;Р insertson(p, tem); //将初始状态作为头结点的孩子结点;Р guangdu(p,n,c); //进行广度搜索;Р printf("是否继续?(继续 1 ,退出 0 )\n");Р scanf("%d",&back);Р?}Р}