XMU C语言程序设计实践(4)

来源:互联网 发布:linux创建物理卷 编辑:程序博客网 时间:2024/05/16 06:31

以下实验二选一。

1、使用队列实现迷宫算法,找到最短路径。

2、实现顺序队列和链队列的所有基本操作,InitQueue(&Q);DestroyQueue(&Q);ClearQueue(&Q);QueueEmpty(Q);QueueLength(Q);GetHead(Q, &e); EnQueue(&Q, e);DeQueue(&Q,&e);QueueTraverse(Q, visit())。

 


实验1:


////by coolxxx//#include<stdio.h>#include<stdlib.h>#include<string.h>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define sqr(a) ((a)*(a))#define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)#define eps 1e-8#define MAX 0x7f7f7f7f#define N 1004#define M 1000004int n,m,ans,lll,cas,cass;int sx,sy,ex,ey;int q[M][2];int fa[M];int u[N][N];char map[N][N];int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};void print(int x){int i,j;if(q[x][0]==sx && q[x][1]==sy){printf("(%d,%d)->",sx,sy);return;}print(fa[x]);printf("(%d,%d)->",q[x][0],q[x][1]);}int spfa(){int i,j,x,y,xx,yy,h,t;memset(q,0,sizeof(q));h=0;t=1;q[1][0]=sx;q[1][1]=sy;u[sx][sy]=1;while(h!=t){x=q[++h][0];y=q[h][1];if(x==ex && y==ey){print(fa[t]);printf("(%d,%d)\n",ex,ey);return 1;}for(i=0;i<4;i++){xx=x+dx[i];yy=y+dy[i];if(xx<1 || yy<1 || xx>n || yy>m || map[xx][yy]=='1' || u[xx][yy])continue;q[++t][0]=xx;q[t][1]=yy;fa[t]=h;u[xx][yy]=1;}}return 0;}int main(){//freopen("1.txt","r",stdin);int i,j;scanf("%d",&n);m=n;sx=1;sy=1;ex=n;ey=m;for(i=1;i<=n;i++){scanf("%s",map[i]+1);puts(map[i]+1);}if(map[sx][sy]=='1' || map[ex][ey]=='1'){puts("No way");return 0;}if(!spfa())puts("No way");return 0;}/**/


实验2:


可参考STL queue


原创粉丝点击