C语言编程 图的创建与遍历

Python017

C语言编程 图的创建与遍历,第1张

在C语言编程中,图的创建和遍历:

#include<stdio.h>

#define N 20

#define TRUE 1

#define FALSE 0

int visited[N] 

typedef struct    /*队列的定义*/

{

int data[N]

int front,rear

}queue

typedef struct    /*图的邻接矩阵*/

{

int vexnum,arcnum

char vexs[N]

int arcs[N][N]

}

graph

void createGraph(graph *g) /*建立一个无向图的邻接矩阵*/

void dfs(int i,graph *g)   /*从第i个顶点出发深度优先搜索*/

void tdfs(graph *g)         /*深度优先搜索整个图*/

void bfs(int k,graph *g)   /*从第k个顶点广度优先搜索*/

void tbfs(graph *g)         /*广度优先搜索整个图*/

void init_visit()           /*初始化访问标识数组*/

void createGraph(graph *g)   /*建立一个无向图的邻接矩阵*/

{   int i,j

char v

g->vexnum=0

g->arcnum=0

i=0

printf("输入顶点序列(以#结束):

")

while((v=getchar())!='#')

{

g->vexs[i]=v       /*读入顶点信息*/

i++

}

g->vexnum=i            /*顶点数目*/

for(i=0i<g->vexnumi++) /*邻接矩阵初始化*/

for(j=0j<g->vexnumj++)

g->arcs[i][j]=0

printf("输入边的信息:

")

scanf("%d,%d",&i,&j) /*读入边i,j*/

while(i!=-1)              /*读入i,j为-1时结束*/

{

g->arcs[i][j]=1

g->arcs[j][i]=1

scanf("%d,%d",&i,&j)

}

}

void dfs(int i,graph *g) /*从第i个顶点出发深度优先搜索*/

{

int j

printf("%c",g->vexs[i])

visited[i]=TRUE

for(j=0j<g->vexnumj++)

if((g->arcs[i][j]==1)&&(!visited[j]))

dfs(j,g)

}

void tdfs(graph *g)      /*深度优先搜索整个图*/

{

int i

printf("

从顶点%C开始深度优先搜索序列:",g->vexs[0])

for(i=0i<g->vexnumi++)

if(visited[i]!=TRUE)

dfs(i,g)

}

void bfs(int k,graph *g)  /*从第k个顶点广度优先搜索*/

{

int i,j

queue qlist,*q

q=&qlist

q->rear=0

q->front=0

printf("%c",g->vexs[k])

visited[k]=TRUE

q->data[q->rear]=k

q->rear=(q->rear+1)%N

while(q->rear!=q->front)

{

i=q->data[q->front]

q->front=(q->front+1)%N

for(j=0j<g->vexnumj++)

if((g->arcs[i][j]==1)&&(!visited[j]))

{

printf("%c",g->vexs[j])

visited[j]=TRUE

q->data[q->rear]=j

q->rear=(q->rear+1)%N

}

}

}

void tbfs(graph *g) /*广度优先搜索整个图*/

{

int i

printf("

从顶点%C开始广度优先搜索序列:",g->vexs[0])

for(i=0i<g->vexnumi++)

if(visited[i]!=TRUE)

bfs(i,g)

printf("

")

}

void init_visit()   /*初始化访问标识数组*/

{

int i

for(i=0i<Ni++)

visited[i]=FALSE

}

int main()

{

graph ga

int i,j

createGraph(&ga)

printf("无向图的邻接矩阵:

")

for(i=0i<ga.vexnumi++)

{

for(j=0j<ga.vexnumj++)

printf("%3d",ga.arcs[i][j])

printf("

")

}

init_visit()

tdfs(&ga)

init_visit()

tbfs(&ga)

return 0

}

C语言编程,顾名思义,就是用C语言来进行计算机编程工作。

C语言是国际上广泛流行的,很有发展前途的计算机高级语言.它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件.

C语言是一种引用广泛,并且实现灵活的一种计算机编程语言,用C语言编出来的程序,可以在很多平台上运行,可移植性强。具体的C语言编程内容请参加C或者C++等。

#include

using namespace std

#define Twoto1(i,j,w) i*w+j

void createimage(unsigned char *&img, int w, int h)

{img = new unsigned char[w*h]}

void delateimage(unsigned char*img)

{delete []img}

void readimage(unsigned char*img, int w, int h, char *fname)

{

FILE *fp

fopen_s(&fp,fname, "rb")

if (fp == NULL){ cout <<"error" <<endlreturn}

size_t result

result=fread(img , sizeof(unsigned char), w*h, fp)

if (result != w*h)

{

cout <<"Reading error" <<endl

return

}

else

cout <<"Reading Ok!" <<endl

fclose(fp)

}

void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])

{

for (int i = 0i for (int j = 0j if (iw - 3 || j>h - 3)

image1[Twoto1(i,j,w)] = 0

else

{

float temp = 0

for (int m = 0m<5m++)

for (int n = 0n<5n++)

{

temp += (image[Twoto1(i-2+m,j-2+n,w)] moban[m][n])

}

if (temp>255) image1[Twoto1(i, j, w)] = 255

else if (temp<0) image1[Twoto1(i, j, w)] = 0

else image1[Twoto1(i, j, w)] = temp

}

}

void saveimage(unsigned char *img, int w, int h, char *fname)

{

FILE *fp

fopen_s(&fp, fname, "wb")

if (fp == NULL) { cout <<"error" <<endlreturn}

size_t result

result = fwrite(img, sizeof(unsigned char), w*h, fp)

if (result != w*h)

{

cout <<"Write error" <<endl

return

}

else

cout <<"Write Ok!" <<endl

fclose(fp)

}

void main()

{

unsigned char *img

unsigned char *img1

float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } }

//float moban[5][5] = { 0 }

int w = 512, h = 512

createimage(img, w, h)

createimage(img1, w, h)

readimage(img, w, h, "E:\ss.raw")

mobanjuanji(img, img1,w, h, moban)

saveimage(img, w, h, "E:\ss_1.raw")

saveimage(img1, w, h, "E:\ss_2.raw")

delateimage(img)

delateimage(img1)

}

扩展资料

C语言实现一个图片的读出和写入

#include <stdlib.h>

#include <windows.h>

int file_size(char* filename)//获取文件名为filename的文件大小。

{

FILE *fp = fopen(filename, "rb")//打开文件。

int size

if(fp == NULL) // 打开文件失败

return -1

fseek(fp, 0, SEEK_END)//定位文件指针到文件尾。

size=ftell(fp)//获取文件指针偏移量,即文件大小。

fclose(fp)//关闭文件。

return size

}

int main ()

{

int size=0

size=file_size("qw")

printf("%d\n",size)

FILE * pFile,*qw

char *buffer=(char*)malloc(sizeof(char)*size)

qw   =fopen("qw","r")

pFile = fopen ( "qwe" , "wb" )

printf("%d==\n",pFile)

printf("%d\n",size)

fread(buffer,1,size,qw)

fwrite (buffer , sizeof(byte), size , pFile )

fclose (pFile)

rename("qwe","Groot.jpg")

return 0

}

framebuffer(帧缓冲)。

帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。

显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。

三基色:RGB(红绿蓝)。

在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!

用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!

PS:同样要编译运行后才能出效果。

#include <stdio.h>

#include <sys/mman.h>

#include <fcntl.h>

#include <linux/fb.h>

#include <stdlib.h>

#define RGB888(r,g,b) ((r &0xff) <<16 | (g &0xff) <<8 | (b &0xff))

#define RGB565(r,g,b) ((r &0x1f) <<11 | (g &0x3f) <<5 | (b &0x1f))

int main()

{

int fd = open("/dev/fb0", O_RDWR)

if(fd <0){

perror("open err. \n")

exit(EXIT_FAILURE)

printf("xres: %d\n", info.xres)

printf("yres: %d\n", info.yres)

printf("bits_per_pixel: %d\n", info.bits_per_pixel)

size_t len = info.xres*info.yres*info.bits_per_pixel >>3

unsigned long* addr = NULL

addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0)

if(addr == (void*)-1){

perror("mmap err. \n")