用c语言写一个大规模矩阵遍历的程序,在不同规模的数据下运行,比较按行遍历快还是按列遍历快。

用c语言写一个大规模矩阵遍历的程序,在不同规模的数据下运行,比较按行遍历快还是按列遍历快。

本题老师的考察点:矩阵在计算机内存储的方式

解答本题时遇到的一些问题:

  1. 在考虑矩阵时,考虑了数组,又想到了线性代数,刚开始还在纠结行列是不是要一致。
  2. 直接从codeblocks粘贴代码过来简直太丑了,于是想到了我好久不用的csdn账号,顺便再发个原创博客。
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
	const int MAX_ROW = 2048;
	const int MAX_COL = 2048;
	int (*a)[MAX_COL]=(int(*)[MAX_COL])malloc(sizeof(int)*MAX_ROW*MAX_COL);
	clock_t start, finish;

	//先行后列
	start = clock();
	for (int i = 0; i<MAX_ROW; i++)
	for (int j = 0; j<MAX_COL; j++)
		a[i][j] = 1;
	finish = clock();
	printf("The first travel time is %lf ms\n",(double)finish-start);
	//先列后行
	start = clock();
	for (int i = 0; i<MAX_COL; i++)
	for (int j = 0; j<MAX_ROW; j++)
		a[j][i] = 1;
	finish = clock();
	printf("The second travel time is %lf ms\n",(double)finish-start);
    return 0;
}


好的,我来为您编一个C语言实现有向图遍历程序程序会让用户输入图的邻接矩阵,并根据用户输入创建有向图。然后,程序会实现深度优先遍历和广度优先遍历两种遍历方式。 下面是程序的代码: ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_VERTICES 100 typedef struct Graph { int numVertices; bool adjMatrix[MAX_VERTICES][MAX_VERTICES]; } Graph; Graph* newGraph(int numVertices) { Graph* graph = (Graph*)malloc(sizeof(Graph)); graph->numVertices = numVertices; for (int i = 0; i < numVertices; i++) { for (int j = 0; j < numVertices; j++) { graph->adjMatrix[i][j] = false; } } return graph; } void addEdge(Graph* graph, int src, int dest) { graph->adjMatrix[src][dest] = true; } void dfs(Graph* graph, int vertex, bool visited[]) { visited[vertex] = true; printf("%d ", vertex); for (int i = 0; i < graph->numVertices; i++) { if (!visited[i] && graph->adjMatrix[vertex][i]) { dfs(graph, i, visited); } } } void bfs(Graph* graph, int vertex, bool visited[]) { int queue[graph->numVertices]; int front = 0; int rear = 0; queue[rear++] = vertex; visited[vertex] = true; while (front != rear) { int v = queue[front++]; printf("%d ", v); for (int i = 0; i < graph->numVertices; i++) { if (!visited[i] && graph->adjMatrix[v][i]) { visited[i] = true; queue[rear++] = i; } } } } int main() { int numVertices; printf("请输入图中顶点的数量:"); scanf("%d", &numVertices); Graph* graph = newGraph(numVertices); int adjMatrix[numVertices][numVertices]; printf("请输入图的邻接矩阵:\n"); for (int i = 0; i < numVertices; i++) { for (int j = 0; j < numVertices; j++) { scanf("%d", &adjMatrix[i][j]); if (adjMatrix[i][j]) { addEdge(graph, i, j); } } } bool visited[numVertices]; for (int i = 0; i < numVertices; i++) { visited[i] = false; } printf("深度优先遍历结果:"); for (int i = 0; i < numVertices; i++) { if (!visited[i]) { dfs(graph, i, visited); } } printf("\n"); for (int i = 0; i < numVertices; i++) { visited[i] = false; } printf("广度优先遍历结果:"); for (int i = 0; i < numVertices; i++) { if (!visited[i]) { bfs(graph, i, visited); } } printf("\n"); return 0; } ``` 该程序会先要求用户输入图的顶点数量,然后根据顶点数量创建图。接着,程序会要求用户输入图的邻接矩阵,并根据邻接矩阵创建图的边。最后,程序将实现深度优先遍历和广度优先遍历,并输出遍历结果。 注意:在创建图的时候,我们使用邻接矩阵来表示图的边。如果邻接矩阵中的值为1,则表示该边存在;否则,表示该边不存在。在实现深度优先遍历和广度优先遍历时,我们使用一个visited数组来记录每个顶点是否已经被访问过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值