带权无项图的存储模板,无聊 做做玩玩。
#include<iostream>
#include<vector>
#include<queue>
#define MAXN 100
using namespace std;
struct Node
{
int data; //权值
int number; //编号
Node(int number,int data):data(data),number(number){}
};
vector<Node> map[MAXN];
int vis[MAXN] = {0};
void BFS(int start);
int main()
{
freopen("in.txt","r",stdin);
int m,n; //节点数 和 路径数
cin >> m >> n;
for(int i = 1;i <= n;i++)
{
int a,b,c;
cin >> a >> b >> c;
//cout << a << b << c << endl;
Node node1(b,c),node2(a,c);
map[a].push_back(node1);
map[b].push_back(node2);
}
BFS(1);
return 0;
}
void BFS(int start)
{
queue<int> q;
//新建队列两步 把该节点放入 标记该节点走过
q.push(start);
vis[start] = 1;
cout << start << endl;
while(!q.empty())
{
//取出来
int temp = q.front();
q.pop();
//搜索所有的相邻节点
for(int i = 0;i < map[temp].size();i++)
{
if(vis[map[temp][i].number]==0)
{
cout << map[temp][i].number << endl;
q.push(map[temp][i].number);
vis[map[temp][i].number] = 1;
}
}
}
}
带权有向图
/*
设计思路:
函数fun(root ,level, total)
每个层去掉一条边 向下搜索
搜到叶子节点如果 如果total 小于cos 更新 cos
*/
#include<iostream>
#include<vector>
#define MAXN 320
using namespace std;
vector<int> v[MAXN];
int vis[MAXN] = {0};
int main()
{
int m,n;
cin >> m >> n;
for(int i = 0;i < n;i++)
{
int a,b;
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
}