在有限的二维数组范围内按行按列对每一个元素位置进行编号,此时对于编号cnt我们可以以此为bridge建立关系,方便查找:
示例代码如下:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 const int maxn = 100; 6 const int dx[]={0,0,1,-1}; 7 const int dy[]={1,-1,0,0}; 8 9 int mapper[maxn][maxn]; 10 bool dir[maxn*maxn+5][4];//第一维度:编号,第二维度:方向编号 11 int id[maxn][maxn];//编号与二维坐标的对应 12 13 /*上方的对应是由坐标对应到编号,在查找时,由编号找坐标并不容易 14 根据需求不同,由编号找坐标的方式可以写成: 15 int idx[maxn];//idx[编号]=x坐标 16 int idy[maxn];//idy[编号]=y坐标 17 */ 18 19 int r,c; 20 21 int initial_dir() 22 { 23 int cnt=0; 24 for(int i=0;i<r;++i) for(int k=0;k<c;++k) 25 { 26 id[i][k]=cnt; 27 for(int d=0;d<4;++d) 28 { 29 int newx = i+dx[d]; 30 int newy = k+dy[d]; 31 if(newx>=0&&newx<r&&newy>=0&&newy<c && mapper[newx][newy])dir[cnt][d]=true; 32 else dir[cnt][d]=false; 33 } 34 cnt++; 35 } 36 return cnt;//返回总点数 37 } 38 39 int readin() 40 { 41 cin>>r>>c; 42 for(int i=0;i<r;++i) for(int k=0;k<c;++k) 43 { 44 cin>>mapper[i][k];//0不可行,1可行 45 } 46 return 0; 47 } 48 49 int main() 50 { 51 ios::sync_with_stdio(false); 52 readin(); 53 initial_dir(); 54 return 0; 55 }
OK//某种意义上说这是空间换时间
原文地址:https://www.cnblogs.com/savennist/p/12362159.html
时间: 2024-11-06 11:23:11