/*BY:CHLAWS*/
/*求单一路径*/
#include<stdio.h>
#include<stdlib.h>
int visted(int i,int j);
/*2表示墙,0表示可以行走*/
int a[9][9]={
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
int success = 0; //标记
int startX=1,startY=1;//开始坐标
int endX=7,endY=7;//出口坐标
int main()
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(a[i][j] == 2)
{
printf("■");
}
else
printf("◇");
}
printf(" ");
}
if(!visted(startX,startY))
{
printf("no find exit! ");
}
else
{ /*画出找到的路径*/
printf(" ");
for(int x=0; x<9; x++)
{
for(int y=0; y<9; y++)
{
if(a[x][y] == 2)
printf("■");
else
if(a[x][y] == 1)
printf("★");
else
printf("◇");
}
printf(" ");
}
}
system("PAUSE");
return 0;
}
int visted(int i,int j)
{
a[i][j] = 1; /*假设是正确的路径*/
if(i==endX && j==endY)
success = 1; /*找到出口*/
/*四个方向的搜索*/
if(!success && a[i][j-1]==0) visted(i, j-1);
if(!success && a[i+1][j]==0) visted(i+1,j);
if(!success && a[i][j+1]==0) visted(i,j+1);
if(!success && a[i-1][j]==0) visted(i-1, j);
if(!success)
a[i][j] = 0; /*没找到路,取消假设的路径*/
return success;
}
#include<stdlib.h>
int visted(int i,int j);
/*2表示墙,0表示可以行走*/
int a[9][9]={
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
int success = 0; //标记
int startX=1,startY=1;//开始坐标
int endX=7,endY=7;//出口坐标
int main()
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(a[i][j] == 2)
{
printf("■");
}
else
printf("◇");
}
printf(" ");
}
if(!visted(startX,startY))
{
printf("no find exit! ");
}
else
{ /*画出找到的路径*/
printf(" ");
for(int x=0; x<9; x++)
{
for(int y=0; y<9; y++)
{
if(a[x][y] == 2)
printf("■");
else
if(a[x][y] == 1)
printf("★");
else
printf("◇");
}
printf(" ");
}
}
system("PAUSE");
return 0;
}
int visted(int i,int j)
{
a[i][j] = 1; /*假设是正确的路径*/
if(i==endX && j==endY)
success = 1; /*找到出口*/
/*四个方向的搜索*/
if(!success && a[i][j-1]==0) visted(i, j-1);
if(!success && a[i+1][j]==0) visted(i+1,j);
if(!success && a[i][j+1]==0) visted(i,j+1);
if(!success && a[i-1][j]==0) visted(i-1, j);
if(!success)
a[i][j] = 0; /*没找到路,取消假设的路径*/
return success;
}
/*求所有路径*/
/*基本上思路一样就不注释了*/
#include<stdio.h>
#include<stdlib.h>
void visted(int i,int j);
int a[9][9]={
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
int startX=1,startY=1;
int endX=7,endY=7;
int main()
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(a[i][j] == 2)
{
printf("■");
}
else
printf("◇");
}
printf(" ");
}
visted(startX,startY);
system("PAUSE");
return 0;
}
void visted(int i,int j)
{
a[i][j] = 1;
if(i==endX && j==endY)
{
printf(" ");
for(int x=0; x<9; x++)
{
for(int y=0; y<9; y++)
{
if(a[x][y] == 2)
printf("■");
else
if(a[x][y] == 1)
printf("★");
else
printf("◇");
}
printf(" ");
}
}
if(a[i][j+1]==0) visted(i,j+1);
if(a[i+1][j]==0) visted(i+1,j);
if(a[i-1][j]==0) visted(i-1, j);
if(a[i][j-1]==0) visted(i, j-1);
a[i][j] = 0;
}
/*基本上思路一样就不注释了*/
#include<stdio.h>
#include<stdlib.h>
void visted(int i,int j);
int a[9][9]={
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
int startX=1,startY=1;
int endX=7,endY=7;
int main()
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(a[i][j] == 2)
{
printf("■");
}
else
printf("◇");
}
printf(" ");
}
visted(startX,startY);
system("PAUSE");
return 0;
}
void visted(int i,int j)
{
a[i][j] = 1;
if(i==endX && j==endY)
{
printf(" ");
for(int x=0; x<9; x++)
{
for(int y=0; y<9; y++)
{
if(a[x][y] == 2)
printf("■");
else
if(a[x][y] == 1)
printf("★");
else
printf("◇");
}
printf(" ");
}
}
if(a[i][j+1]==0) visted(i,j+1);
if(a[i+1][j]==0) visted(i+1,j);
if(a[i-1][j]==0) visted(i-1, j);
if(a[i][j-1]==0) visted(i, j-1);
a[i][j] = 0;
}