当前位置: 首页 > news >正文

有关图的类型的题目(1)

1、图着色问题

#include<bits/stdc++.h>
using namespace std;
const int N=510,M=N*N;
int color[N];
vector<int> g[M];
int v,m,k,n;void add(int a,int b){g[a].push_back(b);g[b].push_back(a);
}
int judge(int cnt){if(cnt!=k)return 0;for(int i=1;i<=v;i++){for(int j=0;j<g[i].size();j++){int t=g[i][j];if(color[i]==color[t])return 0;}}return 1;
}
int main(){cin>>v>>m>>k;while(m--){int a,b;cin>>a>>b;add(a,b),add(b,a);}cin>>n;for(int i=0;i<n;i++){set<int> se;//set具有去重功能for(int j=1;j<=v;j++){cin>>color[j];se.insert(color[j]);} if(judge(se.size()))cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;
}

2、地下迷宫探索

#include <bits/stdc++.h>
using namespace std;const int N = 1005;
int vis[N];
int g[N][N];
stack<int> stk;
int n, m, src;// 深度优先搜索函数
void dfs(int k) {vis[k] = 1;if (vis[src]) cout << k;else cout << " " << k;stk.push(k);for (int i = 1; i <= n; i++) {if (!vis[i] && g[k][i] == 1) {cout << " ";dfs(i);}}stk.pop();if(!stk.empty()){cout<<" "<<stk.top();}
}int main() {memset(vis, 0, sizeof(vis));cin >> n >> m >> src; // n代表节点数,m代表边数,src代表初末位置 int s, d;for (int i = 1; i <= m; i++) {cin >> s >> d;g[s][d] = g[d][s] = 1;}dfs(src);bool connected = true;for (int i = 1; i <= n; i++) {if (!vis[i]) {connected = false;break;}}if (!connected) cout << " " << 0;return 0;
}    

3、寻宝图

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,m,flag=0;
string map_m[N];
int cnt=0,cns=0;//cnt代表岛屿的数量,cns代表宝藏的数量
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void dfs(int x,int y){if(x<0||x>=n||y<0||y>=m||map_m[x][y]=='0')return;if(map_m[x][y]>'1'){flag=1; } map_m[x][y]='0';for(int i=0;i<4;i++){dfs(x+dx[i],y+dy[i]);}
}
int main(){cin>>n>>m;for(int i=0;i<n;i++)cin>>map_m[i];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(map_m[i][j]>'0'){cnt++;flag=0;dfs(i,j);//查看是否有宝藏 if(flag)cns++;}}}cout<<cnt<<" "<<cns;return 0;
}

4、求采用邻接矩阵作为存储结构的无向图各顶点的度

#include <stdio.h>
#define MVNum 100                 //最大顶点数 
typedef struct{ char vexs[MVNum];           //存放顶点的一维数组 int arcs[MVNum][MVNum];     //邻接矩阵 int vexnum,arcnum;          //图的当前顶点数和边数 
}MGraph; 
void degree(MGraph G);
void CreatMGraph(MGraph *G);/* 创建图 */
int main()
{MGraph G;CreatMGraph(&G);degree(G);return 0;
}
void CreatMGraph(MGraph *G)
{int i,j,k;scanf("%d%d",&G->vexnum,&G->arcnum);getchar();for(i=0;i<G->vexnum;i++)scanf("%c",&G->vexs[i]);for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j]=0;for(k=0;k<G->arcnum;k++){  scanf("%d%d",&i,&j);     G->arcs[i][j]=1; G->arcs[j][i]=1; }
}/* 请在这里填写答案 */
void degree(MGraph G){int i,j;for(i=0;i<G.vexnum;i++){int cnt=0;for(j=0;j<G.vexnum;j++){if(G.arcs[i][j]==1)cnt++;}printf("%c:%d\n",G.vexs[i],cnt);}
} 

5、采用邻接表创建无向图

#include <stdio.h>
#include <stdlib.h>
#define MVNum 100 
typedef struct ArcNode{int adjvex; struct ArcNode *nextarc; int info; 
}ArcNode; typedef struct VNode{ char data; ArcNode *firstarc; 
}VNode, AdjList[MVNum]; typedef struct{ VNode vertices[MVNum]; int vexnum, arcnum; 
}ALGraph;void CreateUDG(ALGraph &G);int main(){ALGraph G;     int i , j,sum=0;CreateUDG(G);ArcNode * p; for(i = 0 ; i < G.vexnum ; ++i){sum=0;p=G.vertices[i].firstarc;for(; p!=NULL; p=p->nextarc){sum+=1;}if(i==0)printf("%d",sum);elseprintf(" %d",sum);}return 0;
}/* 请在这里填写答案 */
void CreateUDG(ALGraph &G) {int i, j, k;char v1, v2;// 输入顶点数和边数scanf("%d %d", &G.vexnum, &G.arcnum);getchar(); // 消耗掉输入缓冲区中的换行符// 输入顶点信息并初始化邻接表for (i = 0; i < G.vexnum; ++i) {scanf("%c", &G.vertices[i].data);G.vertices[i].firstarc = NULL;getchar(); // 消耗掉每个顶点后的换行符}// 输入边信息并构建邻接表for (k = 0; k < G.arcnum; ++k) {scanf("%c %c", &v1, &v2);getchar(); // 消耗掉每条边后的换行符// 查找顶点 v1 和 v2 的位置 i 和 jfor (i = 0; i < G.vexnum; ++i)if (G.vertices[i].data == v1) break;for (j = 0; j < G.vexnum; ++j)if (G.vertices[j].data == v2) break;// 构建依附于顶点 i 的边结点并插入链表头部ArcNode *pi = (ArcNode *)malloc(sizeof(ArcNode));pi->adjvex = j;pi->nextarc = G.vertices[i].firstarc;G.vertices[i].firstarc = pi;// 构建依附于顶点 j 的边结点并插入链表头部ArcNode *pj = (ArcNode *)malloc(sizeof(ArcNode));pj->adjvex = i;pj->nextarc = G.vertices[j].firstarc;G.vertices[j].firstarc = pj;}
}

相关文章:

  • 从基础到实战的量化交易全流程学习:1.2 金融市场基础
  • Springboot用IDEA打jar包 运行时 错误: 找不到或无法加载主类
  • 路由器重分发(OSPF+RIP),RIP充当翻译官,OSPF充当翻译官
  • 【C++】15. 模板进阶
  • Eigen几何变换类 (Transform, Quaternion等)
  • 学习笔记:Qlib 量化投资平台框架 — GETTING STARTED
  • 将服务器接到路由器上访问
  • 【Leetcode 每日一题】2444. 统计定界子数组的数目
  • 图像特征检测算法对比及说明
  • 2025.4.26总结
  • ADC单通道采集实验
  • 3:QT联合HALCON编程—海康相机SDK二次程序开发
  • Android12源码编译及刷机
  • 详解Adobe Photoshop 2024 下载与安装教程
  • 论文笔记(八十)π0.5: a Vision-Language-Action Model with Open-World Generalization
  • Python并行计算:2.Python多线程编程:threading模块详解与守护线程实战
  • Spring Boot 3.4 实战指南:从性能优化到云原生增强
  • Spring Boot安装指南
  • Java后端开发——分层解耦详解
  • [mysql]数据类型精讲下
  • 李公明|一周画记:哈佛打响第一枪
  • 六部门:进一步优化离境退税政策扩大入境消费
  • 哈马斯同意释放剩余所有以方被扣押人员,以换取停火五年
  • 他比李白接地气,比杜甫乐观,比白居易刚毅
  • 人民日报:广东全力推动外贸稳量提质
  • 酒店保洁员调包住客港币,海南官方通报:成立调查组赴属地调查