大家在写c++的时候有没有遇到对二维数组赋值的时候无法快速赋值(赋不为0的值),一般数据不大的情况下使用两个for循环是可以解决的,但是如果出现数据量大的情况下是比较麻烦的。正好做题遇见了,学到了一个新的方法。
vector<vector<int> >b(401, vector<int>(401, -1));
例如这串代码的意思就是一个401401的二维数组,被赋值为-1;相当于b[401][401],他的值全部为-1;*
看一下下面的例题,这道题中就使用到了二维数组快速赋值。题目链接:马的遍历
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
vector<vector<int> >a(401, vector<int>(401));//标记数组,记录马行走过的点
vector<vector<int> >b(401, vector<int>(401, -1));//答案数组,记录马到达点的最小步数
int dx[]={-2,-2,2,2,-1,-1,1,1};
int dy[]={-1,1,-1,1,2,-2,2,-2};
queue<int> q,q1;
void f(){
while(!q.empty()){
//cout<<"tt "<<endl;
for(int i=0;i<8;i++){
int xx=q.front()+dx[i];
int yy=q1.front()+dy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m&&!a[xx][yy]){
a[xx][yy]=1;
b[xx][yy]=b[q.front()][q1.front()]+1;
q.push(xx);
q1.push(yy);
}
}
q.pop();
q1.pop();
}
}
int main(){
cin>>n>>m>>x>>y;
q.push(x);
q1.push(y);
a[x][y]=1;
b[x][y]=0;
f();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",b[i][j]);
}
printf("\n");
}
return 0;
};