ding0 2020-02-25
在有限的二维数组范围内按行按列对每一个元素位置进行编号,此时对于编号cnt我们可以以此为bridge建立关系,方便查找:
示例代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 100;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int mapper[maxn][maxn];
bool dir[maxn*maxn+5][4];//第一维度:编号,第二维度:方向编号
int id[maxn][maxn];//编号与二维坐标的对应
/*上方的对应是由坐标对应到编号,在查找时,由编号找坐标并不容易
根据需求不同,由编号找坐标的方式可以写成:
int idx[maxn];//idx[编号]=x坐标
int idy[maxn];//idy[编号]=y坐标
*/
int r,c;
int initial_dir()
{
int cnt=0;
for(int i=0;i<r;++i) for(int k=0;k<c;++k)
{
id[i][k]=cnt;
for(int d=0;d<4;++d)
{
int newx = i+dx[d];
int newy = k+dy[d];
if(newx>=0&&newx<r&&newy>=0&&newy<c && mapper[newx][newy])dir[cnt][d]=true;
else dir[cnt][d]=false;
}
cnt++;
}
return cnt;//返回总点数
}
int readin()
{
cin>>r>>c;
for(int i=0;i<r;++i) for(int k=0;k<c;++k)
{
cin>>mapper[i][k];//0不可行,1可行
}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
readin();
initial_dir();
return 0;
}OK//某种意义上说这是空间换时间