资源描述:
《骑士游历源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include"stdio.h"#include"stdlib.h"#definemaxlen100intlength=0;//记录所走的步数staticintbx[8]={2,1,-1,-2,-2,-1,1,2};staticintby[8]={1,2,2,1,-1,-2,-2,-1};typedefstruct{intn,m;//n记录行数,m记录列数intch;}node;typedefstruct//定义顺序队列类型{nodedata[maxlen];intfront;intrear;}Sequeue;Sequeue*setqueue()
2、{Sequeue*S;S=(Sequeue*)malloc(sizeof(Sequeue));S->front=0;S->rear=0;returnS;}voidadd(Sequeue*S,intx,inty,intz)//入队函数{if(S->rearrear>=0){S->rear++;S->data[S->rear].n=x;S->data[S->rear].m=y;S->data[S->rear].ch=z;}elseprintf("error");}voiddele(Sequeue*s)//出队函数{if(
3、s->frontrear)s->front++;elseprintf("error");}voidjudge()//判断步数{Sequeue*S;S=setqueue();intx0,y0,x1,y1,x3,y3,i,j;intcount[maxlen+100];inta=0;intstep[maxlen][maxlen];charxa,xb;for(i=0;idata[i].ch=0;}printf("请输入骑士游历的起终点:");scanf("%c,%d%c,%d",&xa,&y0,&xb,&y1
4、);x0=xa-'a';x1=xb-'a';for(i=0;ifrontrear){node*p;x0=S->data[S->front+1].n;y0=S->data[S->front+1].m;for(inti=0;i<8;i++){x3=bx[i]+x0;y3=by[i]+y0;if(x3>=0&&x3<8&&y3>=0&&y3<8&&step[x3][y3]==
5、0){p=(node*)malloc(sizeof(node));p->ch=S->data[S->front+1].ch+1;p->n=x3;p->m=y3;step[x3][y3]=1;if(p->n==x1&&p->m==y1){step[x1][y1]=0;count[a]=p->ch;a++;}elseadd(S,p->n,p->m,p->ch);}}dele(S);}intmin;min=count[0];for(i=1;icount[i])min=count[i];printf("最短步数为:%d",m
6、in);}voidmain(){charnn;nn='y';while(nn=='y'){judge();printf("是否继续输入?('y'是,'n'否)");scanf("%c",&nn);}system("pause");}