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

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//某种意义上说这是空间换时间

相关推荐