遍歷c語言編程,遍曆數組c語言

本文目錄一覽:

用C語言編程實現圖的遍歷演算法

圖的遍歷是指按某條搜索路徑訪問圖中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。圖的遍歷有深度遍歷演算法和廣度遍歷演算法,最近阿傑做了關於圖的遍歷的演算法,下面是圖的遍歷深度優先的演算法(C語言程序):

#includestdio.h

#includemalloc.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;iG-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;iG-n;i++)

visited[i]=0;

for(i=0;iG-n;i++)

if(!visited[i])

DFS(G,i);

}

int main()

{

ALGRAPH *G;

printf(“下面以臨接表存儲一個圖;\n”);

creat(G);

printf(“下面以深度優先遍歷該圖 \n”);

DFSTraverse(G);

getchar();

}

C語言的遍歷演算法

思路1:

寫出所有24種4個數的排列,存到一個數組裡,假如數組是P[24][4];

那麼可以

for (i = 0; i 24; i++)

for (j = 0; j 24; j++)

for (k = 0; k 24; k++)

三層循環,P[i],P[j],P[k]分別是矩陣的三個列

思路2:

利用dfs遞歸枚舉

int used[3][4];/*這個數組存放三個列中0~3這四個數是否已在這一列中出現過,需要提前清零*/

int mat[3][4];/*要枚舉的矩陣*/

void dfs(int col, int row)/*col表示現在已經搜索到哪一列(從0開始編號),row表示這一列已經填了幾行*/

{

int i;

if (col == 2 row == 4)

{

……/*運行到這裡的時候,mat就是枚舉到的一個矩陣*/

return;

}

if (row == 4)

{row = 0; col++;}

for (i = 0; i 4; i++)

if (!used[col][i])

{

used[col][i] = 1;

mat[col][row] = i;

dfs(col, row + 1);

used[col][i] = 0;

}

return;

}

調用的時候調用dfs(0,0)

怎麼用C語言遍歷文件啊?

#include stdio.h #include dos.h #include errno.h #include io.h #include dirent.h #include dir.h #include string.h #include sys\stat.h #include “pm03a.h” void main(int argc,char* argv[]) { //printf(“Number %d\n”,ConfirmFileAttrib(argv[1])); GetDirectory(argv[1]); printf(“\nSearch Over.\n”); } //—————————————————————— //pm03a.h //—————————————————————— void GetDirectory(char *DirectoryName); int ConfirmFileAttrib(char* filename); char *GetCurrentPath(); char* GetFullFileName(char *filename); char *WillDeleteFile(char *FileName); //——————————————————– //————— 獲得文件屬性 ————————— //——————————————————– int ConfirmFileAttrib(char* filename) { int temp=0; int attrib=(_rtl_chmod(filename,0)); if(attrib==-1) { switch(errno) { case ENOENT: //printf(“%s Path or file not found.\n”,filename); temp=0; break; case EACCES: //printf(“Permission denied.\n”); temp=-1; break; default: //printf(“Error number: %d”, errno); temp=-2; break; } } else { if(attrib FA_RDONLY) { temp=1; //printf(“%s is read-only.\n”, filename); } if(attrib FA_HIDDEN) { temp=2; //printf(“%s is hidden.\n”, filename); } if(attrib FA_SYSTEM) { temp=3; //printf(“%s is a system file.\n”, filename); } if(attrib FA_DIREC) { temp=4; //printf(“%s is a directory.\n”, filename); } if (attrib FA_ARCH) { temp=5; //printf(“%s is an archive file.\n”, filename); } } return temp; } //——————————————————– //——————————————————– //————— 獲取目錄流 —————————– //——————————————————– void GetDirectory(char *DirectoryName) { DIR* Directory_Point; struct dirent *entry; bool DirControl; if((Directory_Point=opendir(DirectoryName))==NULL) { printf(“Error opening directory!\n”); return; } else { if(strcmp(DirectoryName,”..”)==0) { return; } if(strcmp(DirectoryName,”.”)==0) DirControl=true; else DirControl=false; chdir(DirectoryName); //char *filename=DirectoryName; //int k=creat(strcat(filename,”.txt”),S_IWRITE); while(bool(entry=readdir(Directory_Point))) { if(ConfirmFileAttrib(entry-d_name)==5) // 確定為文件屬性 { // 文件過濾 WillDeleteFile(entry-d_name); } if(ConfirmFileAttrib(entry-d_name)==4) // 確定為目錄屬性 { if(strcmpi(entry-d_name,”..”)==0||strcmpi(entry-d_name,”.”)==0) { continue; } else { //printf(“\n%s is direct\n\n”,entry-d_name); GetDirectory(entry-d_name); } } } if(!DirControl==true) chdir(“..”); closedir(Directory_Point); } } //——————————————————– //——————————————————– //———- 判斷文件類型以備過濾 ———————— //——————————————————– char* GetFullFileName(char *filename) { char *FullFilename=GetCurrentPath(); if(strlen(FullFilename)=3) { strcat(FullFilename,filename); } else { strcat(FullFilename,”\\”); strcat(FullFilename,filename); } return FullFilename; } char *GetCurrentPath() { char path[1024]=””; strcpy(path, “X:\\”); /* fill string with form of response: X:\ */ path[0] = ‘A’ + getdisk(); /* replace X with current drive letter */ getcurdir(0, path+3); /* fill rest of string with current directory */ return path; } char *WillDeleteFile(char *FileName) { int len; for(len=strlen(FileName);len=0;len–) { if(FileName[len]==’.’) break; } char* Retname; int s=-1; for(int i=len;i=strlen(FileName);i++) { Retname[s+=1]=FileName[i]; } int i=-1; if(Retname[1]==’~’)i=0; if(strcmpi(Retname,”.bak”)==0)i=0; if(strcmpi(Retname,”.obj”)==0)i=0; if(strcmpi(Retname,”.tds”)==0)i=0; if(strcmpi(Retname,”.dcu”)==0)i=0; if(strcmpi(Retname,”.tmp”)==0)i=0; if(strcmpi(Retname,”.ilk”)==0)i=0; if(strcmpi(Retname,”.pch”)==0)i=0; if(strcmpi(Retname,”.pdb”)==0)i=0; if(strcmpi(Retname,”.tlb”)==0)i=0; if(strcmpi(Retname,”.idb”)==0)i=0; if(strcmpi(Retname,”.pdb”)==0)i=0; if(strcmpi(Retname,”.r$p”)==0)i=0; if(strcmpi(Retname,”.OBR”)==0)i=0; if(strcmpi(Retname,”.mbt”)==0)i=0; if(strcmpi(Retname,”.mrt”)==0)i=0; if(strcmpi(Retname,”.csm”)==0)i=0; if(i==0) { remove(GetFullFileName(FileName)); printf(“%s delete\n”,GetFullFileName(FileName)); } return Retname; }

C語言編程 圖的創建與遍歷

在C語言編程中,圖的創建和遍歷:

#includestdio.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;ig-vexnum;i++) /*鄰接矩陣初始化*/

for(j=0;jg-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;jg-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;ig-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;jg-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;ig-vexnum;i++)

if(visited[i]!=TRUE)

bfs(i,g);

printf(“

“);

}

void init_visit()   /*初始化訪問標識數組*/

{

int i;

for(i=0;iN;i++)

visited[i]=FALSE;

}

int main()

{

graph ga;

int i,j;

createGraph(ga);

printf(“無向圖的鄰接矩陣:

“);

for(i=0;iga.vexnum;i++)

{

for(j=0;jga.vexnum;j++)

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++等。

原創文章,作者:AWCO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139274.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AWCO的頭像AWCO
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python遍歷集合中的元素

    本文將從多個方面詳細闡述Python遍歷集合中的元素方法。 一、for循環遍歷集合 Python中,使用for循環可以遍歷集合中的每個元素,代碼如下: my_set = {1, 2…

    編程 2025-04-29
  • Python去掉數組的中括弧

    在Python中,被中括弧包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括弧。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python如何遍歷字典中的key和value

    本文將詳細講解Python中如何遍歷字典中的key和value,包括多種遍歷方式以及在遍歷過程中的一些應用場景。 一、遍歷字典中的key和value 在Python中,字典是一種無…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29

發表回復

登錄後才能評論