基于数组的自定义数据结构1-图路径与编号二维数组

在有限的二维数组范围内按行按列对每一个元素位置进行编号,此时对于编号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//某种意义上说这是空间换时间

猜你喜欢

转载自www.cnblogs.com/savennist/p/12362159.html