#include <stdio.h> #include <stdlib.h> bool GetAcross(int *array,const int end_i,const int end_j,const int start_i,const int start_j,const int M,const int N); int main() { const int M = 5; const int N = 6; int data[M][N] = { {1,1,0,1,0,1}, {1,0,0,0,0,1}, {0,0,1,1,0,0}, {1,0,0,1,1,0}, {0,1,1,0,0,0} }; GetAcross((int*)data,2,0,4,3,M,N); return 0; } bool across( int *p,const int si,const int sj,const int ei,const int ej,const int M,const int N) { int ni = si; int nj = sj; //检查可通性 if(*(p + ni * N + nj) != 0) { return false; } //设置访问标记 *(p + ni * N + nj) = 4; //是否到终点 if(ni == ei && nj == ej) { printf("起点/n"); return true; } ni = si + 1; nj = sj; if(ni < M && across(p,ni,nj,ei,ej,M,N)) { *(p + ni * N + nj) = 3; printf("(%d,%d)/n",ni,nj); return true; } ni = si - 1; if(si > 0 && across(p,ni,nj,ei,ej,M,N)) { *(p + ni * N + nj) = 3; printf("(%d,%d)/n",ni,nj); return true; } ni = si; nj = sj + 1; if(nj < N && across(p,ni,nj,ei,ej,M,N)) { *(p + ni * N + nj) = 3; printf("(%d,%d)/n",ni,nj); return true; } nj = sj - 1; if(sj > 0 && across(p,ni,nj,ei,ej,M,N)) { *(p + ni * N + nj) = 3; printf("(%d,%d)/n",ni,nj); return true; } return false; } bool GetAcross(int *p,const int si,const int sj,const int ei,const int ej,const int M,const int N) { if(p != NULL) { if(si < 0 || si >=M ||sj < 0 || sj >= N) { return false; } //检查可通性 if(*(p + si * N + sj) != 0) { return false; } //是否到终点 if(si == ei && sj == ej) { return true; } if(across(p,si,sj,ei,ej,M,N)) { *(p + si * N + sj) = 3; printf("(%d,%d)/n终点/n",si,sj); return true; } } else { printf("Fuck it,pass a NULL pointer"); } return false; }