用指標訪問二維陣列的問題
關於指標和二維陣列的問題是許多和我一樣的菜鳥初遇的難題 ,下面的一段程式碼是闡述在一個以7*7的陣列遇到上下左右同時有三個為1的即是障礙就將其賭死,可以適用於迷宮程式。
#include<iostream>
#include<iomanip>
#include<windows.h>
#include<math.h>
using namespace std;
int m=7,n=7;
int map[7][7]={{1,1,1,1,1,1,1},{1,0,1,1,1,0,1},{1,0,0,1,0,0,1},{1,0,0,1,0,1,1},{1,0,0,1,0,1,1},{1,0,0,0,0,0,1},{1,1,1,1,1,1,1}}; //測試用的兩組資料
//int map[7][7]={{1,1,1,1,1,1,1},{1,0,1,0,0,0,1},{1,0,0,0,0,1,1},{1,0,1,0,0,0,1},{1,0,0,1,1,0,1},{1,1,0,0,1,0,1},{1,1,1,1,1,1,1}};
void traverse(int *p) //使用遞迴將不需要走的路堵住
{
// cout<<p<<"-----"<<&map[m][n]<<endl;
//system("pause");
int *tail=p; //tail ----堵路指標
int up=0,down=0,right=0,left=0;
if(p==&map[5][5])
{
return;
}
else
{
if(*p==0)
{
if(*(p-1)==1) left=1;
if(*(p+1)==1) right=1;
if(*(p+n)==1) down=1;
if(*(p-n)==1) up=1;
if(left&&right&&down&&!up) //表示只有上方是能過走通的
{
tail=p;
*tail=1;
traverse(p-n);
}
if(left&&right&&up&&!down)
{
tail=p;
*tail=1;
traverse(p+n);
}
if(up&&down&&right&&!left)
{
tail=p;
*tail=1;
traverse(p-1);
}
if(up&&down&&left&&!right)
{
tail=p;
*tail=1;
traverse(p+1);
}
p=tail;
}
// cout<<*p<<setw(2);
p++;
// system("pause");
traverse(p);
}
}
void show()
{
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
cout<<map[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
show();
system("pause");
traverse(&map[1][2]);
show();
return 0;
}