函数 memset(a, 0, sizeof(a))
初始化数组元素,全部置为0或-1
int G[3][4];
memset(G,0,sizeof(G));
for(int i=0; i<3; i++){
for(int j=0; j<4; j++){
cout << G[i][j] ;
}
}
真正的朋友问题
对于第i个人,首先我们需要用一个数sum来记录真正的朋友的个数,然后依次枚举每个人为j,只有当G[i][j] = 1并且G[j][i] = 1时,他们才是真正的朋友。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int G[6][6];
memset(G,0,sizeof(G));
int m; //边的数目
cin >> m;
for(int i=0; i<m; i++){
int a,b;
cin >> a >> b;
G[a][b] = 1;
}
for(int i=1; i<=5; i++){
int sum = 0;
for(int j=1; j<=5; j++ ){
if(G[i][j] == 1 && G[j][i] == 1){
sum++;
}
}
cout << i << "有" << sum << "个真正的朋友" << endl;
}
}
函数 vector
//或者#include<vector>
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v; //动态数组:可以动态地向内插入、删除元素
v.push_back(1); //往数组最后插入元素
v.push_back(2);
for(int i=0; i<v.size(); i++){
cout << v[i] << endl;
}
}
邻接表
带权图
用邻接表储存带权图
#include<bits/stdc++.h>
using namespace std;
struct Edge{
int v,w; //连接的点
int len; // 这条边的权值
};
vector<Edge> G[11]; //动态数组,存放边
void insert1(int u, int v, int w)
{
//插入有向边
Edge temp;
temp.v = v;
temp.w = w;
G[u].push_back(temp);
}
void insert2(int u, int v, int w)
{
//插入双向边
insert1(u, v, w); //正向
insert1(v, u, w); //反向
}
void input()
{
int m;
cin >> m;
for(int i = 0; i < m; i++){
int u, v, w;
cin >> u >> v >> w;
insert2(u, v, w);
}
}
void output()
{
for (int i = 1; i <= 10; i++){
for (int j = 0; j < G[i].size(); j++){
cout << "(" << i << ", " << G[i][j].v << ", " << G[i][j].w << ")" << endl;
}
}
}
int main()
{
input();
output();
}
hash表map
1、定义方法:
map<键类型, 值类型> dict;
2、用法
//插入value_type数据
mapStudent.insert(map<键类型, 值类型>::value_type(键, 值));
//查找元素(用find方法)
if(dict.find(键)!= dict.end())
cout << "找到该元素,对应的值是" << dict.find(键)->second << endl;
else
cout<<"未找到该元素"<<endl;
//或者可以使用count方法进行查找
//count():返回指定元素出现的次数
if(dict.count(键) != 0)
cout << "找到该元素,对应的值是" << dict.find(键)->second << endl;
else
cout<<"未找到该元素"<<endl;