回复 9 楼 embed_xuel
人艰不拆,谢谢提醒啦,
回复 10 楼 top398
top398,还有人相信我啊原来。。。。
#include <stdio.h> #include <stdlib.h> void find(char*p,int B_pos1,int B_pos2,int c,int r,int *q); void main() { int r,c;int i,j;int B_pos1,B_pos2,H_pos1,H_pos2=0; char *p;int num=0; printf("请输入地图的行数和列数,空格隔开:\t"); scanf("%d%d",&r,&c);getchar(); //----此getchar(); 是为了消除前面scanf("%d%d",&r,&c);输入时留下的换行符! printf("请输入%d行%d列的地图:\n",r,c); p=(char *)malloc(sizeof(char)*r*c); for(i=0;i<r;i++)//输入地图 { for(j=0;j<c;j++) { scanf("%c",(p+c*i+j)); } } for(i=0;i<r;i++)//显示地图 { for(j=0;j<c;j++) { printf("%c\t",*(p+c*i+j)); } printf("\n"); } for(i=0;i<r;i++)//找到地图的起点 { for(j=0;j<c;j++) { if(*(p+c*i+j)=='B'); { B_pos1=i; B_pos2=j; } } } find(p,B_pos1,B_pos2,c,r,&num);//用了递归 if(num=1) //如果一只都没有Y输出即找到H的话就输出N找不着 {printf("Y");} else printf("N"); } ///////********填充思想,递归***************************************************/////////////// void find(char*p,int B1,int B2,int c,int r,int *q) { //int num=0;num=*q用来记录是否有可以找到的路径,一旦找到一条路,*q=1,num=*q,main函数用过num的值打印“Y” if(B2!=0) //下面是分四个方向进行分解,并对边界问题进行约束 { if(*(p+c*B1+B2-1)=='H') {*q=1;}//等于1表示可以找到路径,在main函数中打印出来 else{ if(*(p+c*B1+B2-1)=='-') {*(p+c*B1+B2-1)='B';B2=B2-1;find(p,B1,B2,c,r,q );}//注意要减一再递归,以下同 } } if(B2!=r-1) { if(*(p+c*B1+B2+1)=='H') {*q=1;} else{ if(*(p+c*B1+B2+1)=='-') {*(p+c*B1+B2+1)='B';B2=B2+1;find(p,B1,B2,c,r,q);} } } if(B1!=0) { if(*(p+c*(B1-1)+B2)=='H') {*q=1;} else{ if(*(p+c*(B1-1)+B2)=='-') {*(p+c*(B1-1)+B2)='B';B1=B1-1;find(p,B1,B2,c,r,q );} } } if(B1!=c-1) { if(*(p+c*(B1+1)+B2)=='H') {*q=1;} else{ if(*(p+c*(B1+1)+B2)=='-') {*(p+c*(B1+1)+B2)='B';B1=B1+1;find(p,B1,B2,c,r,q );} } } }
// 4*4 迷宫 深度优先搜索求解 // 4*4数组中,1代表通路,0代表障碍,2代表一条可行路径 #include <stdio.h> char maze[4][4] = { {1, 1, 1, 1}, {0, 1, 0, 1}, {0, 1, 0, 1}, {0, 1, 1, 1} }; typedef struct { char x, y; } COORD; COORD dir[4] = { {0, 1}, {0, -1}, {1, 0}, { -1, 0} }; COORD path[16]; void maze_print( void ) { int i, j; for ( i = 0; i < 4; i++ ) { for ( j = 0; j < 4; j++ ) printf( "%2d", maze[i][j] ); printf( "\n" ); } printf( "--------\n" ); } void maze_try( int k ) { int i; if ( path[k].x == 3 && path[k].y == 3 ) { maze_print(); return; } for ( i = 0; i < 4; i++ ) { path[k + 1].x = path[k].x + dir[i].x; path[k + 1].y = path[k].y + dir[i].y; if ( path[k + 1].x >= 0 && path[k + 1].x < 4 && path[k + 1].y >= 0 && path[k + 1].y < 4 && maze[path[k + 1].x][path[k + 1].y] == 1 ) { maze[path[k + 1].x][path[k + 1].y] = 2; maze_try( k + 1 ); maze[path[k + 1].x][path[k + 1].y] = 1; } } } int main( void ) { printf ( "Origin:\n" ); maze_print(); path[0].x = 0; path[0].y = 0; maze[0][0] = 2; maze_try( 1 ); return 0; }