c語言建立圖
1. 怎樣利用c語言製作圖片
首先你要對你想製作的圖片格式了解,比如說BMP等,你需要了解這種格式圖片的結構和數據組織,然後通過編程來創建一個這樣的圖片,接著就是填充圖片結構的工作了
之後這個圖片就可以被支持的軟體打開了
2. C語言數據結構圖的構建怎麼弄
你好,#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
typedef struct Bnode //二叉樹節點類型
{
int m;
struct Bnode *Lchild,*Rchild;
}Btnode, *BTptr;
typedef struct Dnode //隊列節點類型
{
Btnode *pr;
struct Dnode *next;
}Qnode,*Qlink;
typedef struct //q節點類型
{
Qnode *front,*rear;
}linkqueue;
void Lcreatqueue(linkqueue *q) //創建隊列
{
q->front=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
q->rear=q->front;
}
Btnode *Getqtop(linkqueue *Q)
{
return(Q->front->pr);
}
void Enqueue(linkqueue *q,Btnode *e) //入隊
{
Qlink p;
p=(Qlink)malloc(sizeof(Qnode));
p->pr=e;
p->next=NULL;
if(q->front==NULL)q->front=p;
else
q->rear->next=p;
q->rear=p;
}
Btnode *DeQueue(linkqueue *q) //出隊
{ Qlink p;
if(q->front==q->rear) return(NULL);
else
{
p=q->front;
q->front=p->next;
free(p);
return(q->front->pr);
}
}
BTptr creatbtree(BTptr BT)
{
int i=1;
linkqueue *Q=NULL;
BTptr q;
//BTptr s;
Btnode *p,*Del;
Q=(linkqueue *)malloc(sizeof(linkqueue));
Lcreatqueue(Q);
Q->rear=Q->front=NULL;
BT=NULL;
while(iLchild=p->Rchild=NULL;
p->m=i;
Enqueue(Q,p);
if(i==1)BT=p;
else
{
q=Getqtop(Q); //q指向二叉樹的指針
if(p&&q)
if(i%2==0)q->Lchild=p;
else q->Rchild=p;
if(i%2==1) Del=DeQueue(Q);
}
i++;
}
return(BT);
}
main()
{BTptr *p=NULL;
p=creatbtree(p);
}
還是希望你自己會去編一遍
3. c語言中如何創建一幅圖,同時將數據輸入到圖中
結構體
sturct Shortway{
char *beigin;
char *end;
int distance;
};
4. 急!!如何用C語言建立一個圖和圖的深度優先搜索遍歷,舉個例子就行,要代碼!!謝謝!!
/* ======================================== */
/* 圖形的深度優先搜尋法 */
/* ======================================== */
#include <stdlib.h>
struct node /* 圖形頂點結構宣告 */
{
int vertex; /* 頂點資料 */
struct node *nextnode; /* 指下一頂點的指標 */
};
typedef struct node *graph; /* 圖形的結構新型態 */
struct node head[9]; /* 圖形頂點結構數組 */
int visited[9]; /* 遍歷記錄數組 */
/* ---------------------------------------- */
/* 建立圖形 */
/* ---------------------------------------- */
void creategraph(int *node,int num)
{
graph newnode; /* 新頂點指標 */
graph ptr;
int from; /* 邊線的起點 */
int to; /* 邊線的終點 */
int i;
for ( i = 0; i < num; i++ ) /* 讀取邊線的迴路 */
{
from = node[i*2]; /* 邊線的起點 */
to = node[i*2+1]; /* 邊線的終點 */
/* 建立新頂點記憶體 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 建立頂點內容 */
newnode->nextnode = NULL; /* 設定指標初值 */
ptr = &(head[from]); /* 頂點位置 */
while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */
ptr = ptr->nextnode; /* 下一個頂點 */
ptr->nextnode = newnode; /* 插入結尾 */
}
}
/* ---------------------------------------- */
/* 圖形的深度優先搜尋法 */
/* ---------------------------------------- */
void dfs(int current)
{
graph ptr;
visited[current] = 1; /* 記錄已遍歷過 */
printf("頂點[%d] ",current); /* 印出遍歷頂點值 */
ptr = head[current].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如過沒遍歷過 */
dfs(ptr->vertex); /* 遞回遍歷呼叫 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
}
/* ---------------------------------------- */
/* 主程式: 建立圖形後,將遍歷內容印出. */
/* ---------------------------------------- */
void main()
{
graph ptr;
int node[20][2] = { {1, 2}, {2, 1}, /* 邊線數組 */
{1, 3}, {3, 1},
{2, 4}, {4, 2},
{2, 5}, {5, 2},
{3, 6}, {6, 3},
{3, 7}, {7, 3},
{4, 8}, {8, 4},
{5, 8}, {8, 5},
{6, 8}, {8, 6},
{7, 8}, {8, 7} };
int i;
for ( i = 1; i <= 8; i++ )
{
head[i].vertex = i; /* 設定頂點值 */
head[i].nextnode = NULL; /* 清除圖形指標 */
visited[i] = 0; /* 設定遍歷初值 */
}
creategraph(node,20); /* 建立圖形 */
printf("圖形的鄰接鏈表內容:\n");
for ( i = 1; i <= 8; i++ )
{
printf("頂點%d =>",head[i].vertex); /* 頂點值 */
ptr = head[i].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
printf(" %d ",ptr->vertex); /* 印出頂點內容 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
printf("\n"); /* 換行 */
}
printf("圖形的深度優先遍歷內容:\n");
dfs(1); /* 印出遍歷過程 */
printf("\n"); /* 換行 */
}
5. C語言圖的創建和遍歷演算法,緊急
圖的遍歷是指按某條搜索路徑訪問圖中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。圖的遍歷有深度遍歷演算法和廣度遍歷演算法,最近阿傑做了關於圖的遍歷的演算法,下面是圖的遍歷深度優先的演算法(C語言程序):
#include<stdio.h>
#include<malloc.h>
#define MaxVertexNum 5
#define m 5
#define TRUE 1
#define NULL 0
typedef struct node
{
int adjvex;
struct node *next;
}JD;
typedef struct EdgeNode
{
int vexdata;
JD *firstarc;
}TD;
typedef struct
{
TD ag[m];
int n;
}ALGRAPH;
void DFS(ALGRAPH *G,int i)
{
JD *p;
int visited[80];
printf("visit vertex:%d->",G->ag[i].vexdata);
visited[i]=1;
p=G->ag[i].firstarc;
while(p)
{
if (!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void creat(ALGRAPH *G)
{
int i,m1,j;
JD *p,*p1;
printf("please input the number of graph\n");
scanf("%d",&G->n);
for(i=0;i<G->n;i++)
{
printf("please input the info of node %d",i);
scanf("%d",&G->ag[i].vexdata);
printf("please input the number of arcs which adj to %d",i);
scanf("%d",&m1);
printf("please input the adjvex position of the first arc\n");
p=(JD *)malloc(sizeof(JD));
scanf("%d",&p->adjvex);
p->next=NULL;
G->ag[i].firstarc=p;
p1=p;
for(j=2 ;j<=m1;j++)
{
printf("please input the position of the next arc vexdata\n");
p=(JD *)malloc(sizeof(JD));
scanf("%d",&p->adjvex);
p->next=NULL;
p1->next=p;
p1=p;
}
}
}
int visited[MaxVertexNum];
void DFSTraverse(ALGRAPH *G)
{
int i;
for(i=0;i<G->n;i++)
visited[i]=0;
for(i=0;i<G->n;i++)
if(!visited[i])
DFS(G,i);
}
int main()
{
ALGRAPH *G;
printf("下面以臨接表存儲一個圖;\n");
creat(G);
printf("下面以深度優先遍歷該圖 \n");
DFSTraverse(G);
getchar();
}
6. c語言實驗:圖的建立和深度遍歷程序
#include "stdio.h"
#include "string.h"
#define MAX 21
int legal(int x, int y);
void dfs(int i, int j);
char map[MAX][MAX];
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int w, h;
int ans;
int main(void)
{
while (scanf("%d%d", &w, &h) && (w + h))
{
int i, j;
int si, sj;
ans = 0;
memset(map, 0, sizeof(map));
for (i=0; i<h; i++)
{
scanf("%s", map[i]);
for (j=0; j<w; j++)
{
if (map[i][j] == '@')
{
si = i;
sj = j;
}
}
}
dfs(si, sj);
printf("%d\n", ans);
}
return 0;
}
int legal(int x, int y)
{
if (x < 0 || x > h || y < 0 || y > w)
{
return 0;
}
return 1;
}
void dfs(int i, int j)
{
int k;
int x, y;
++ans;
map[i][j] = '#';
for (k=0; k<4; k++)
{
x = i + dir[k][0];
y = j + dir[k][1];
if (legal(x, y) && map[x][y] == '.')
{
dfs(x, y);
}
}
}
這是一個簡單的 深搜的例子!
7. C語言編程 圖的創建與遍歷
在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=0;i<g->vexnum;i++) /*鄰接矩陣初始化*/
for(j=0;j<g->vexnum;j++)
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=0;j<g->vexnum;j++)
if((g->arcs[i][j]==1)&&(!visited[j]))
dfs(j,g);
}
void tdfs(graph *g) /*深度優先搜索整個圖*/
{
int i;
printf("
從頂點%C開始深度優先搜索序列:",g->vexs[0]);
for(i=0;i<g->vexnum;i++)
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=0;j<g->vexnum;j++)
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=0;i<g->vexnum;i++)
if(visited[i]!=TRUE)
bfs(i,g);
printf("
");
}
void init_visit() /*初始化訪問標識數組*/
{
int i;
for(i=0;i<N;i++)
visited[i]=FALSE;
}
int main()
{
graph ga;
int i,j;
createGraph(&ga);
printf("無向圖的鄰接矩陣:
");
for(i=0;i<ga.vexnum;i++)
{
for(j=0;j<ga.vexnum;j++)
printf("%3d",ga.arcs[i][j]);
printf("
");
}
init_visit();
tdfs(&ga);
init_visit();
tbfs(&ga);
return 0;
}
8. C語言如何畫圖
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. ");
exit(EXIT_FAILURE);
printf("xres: %d ", info.xres);
printf("yres: %d ", info.yres);
printf("bits_per_pixel: %d ", 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. ");