• 回答数

    5

  • 浏览数

    164

一谷鱼vegfish
首页 > 毕业论文 > c语言五指棋的毕业论文

5个回答 默认排序
  • 默认排序
  • 按时间排序

尚家宜商贸

已采纳

**********************************************************//* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */#include <>#include <>#include <>#include <>#include <>/**********************************************************//* 定义符号常量 *//*定义画棋盘所需的制表符*/#define CROSSRU 0xbf /*右上角点*/#define CROSSLU 0xda /*左上角点*/#define CROSSLD 0xc0 /*左下角点*/#define CROSSRD 0xd9 /*右下角点*/#define CROSSL 0xc3 /*左边*/#define CROSSR 0xb4 /*右边*/#define CROSSU 0xc2 /*上边*/#define CROSSD 0xc1 /*下边*/#define CROSS 0xc5 /*十字交叉点*//*定义棋盘左上角点在屏幕上的位置*/#define MAPXOFT 5#define MAPYOFT 2/*定义1号玩家的操作键键码*/#define PLAY1UP 0x1157/*上移--'W'*/#define PLAY1DOWN 0x1f53/*下移--'S'*/#define PLAY1LEFT 0x1e41/*左移--'A'*/#define PLAY1RIGHT 0x2044/*右移--'D'*/#define PLAY1DO 0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define PLAY2UP 0x4800/*上移--方向键up*/#define PLAY2DOWN 0x5000/*下移--方向键down*/#define PLAY2LEFT 0x4b00/*左移--方向键left*/#define PLAY2RIGHT 0x4d00/*右移--方向键right*/#define PLAY2DO 0x1c0d/*落子--回车键Enter*//*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE 0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 *//*若有棋子, 还应能指出是哪个玩家的棋子 */#define CHESSNULL 0 //没有棋子#define CHESS1 'O'//一号玩家的棋子#define CHESS2 'X'//二号玩家的棋子/*定义按键类别*/#define KEYEXIT 0/*退出键*/#define KEYFALLCHESS 1/*落子键*/#define KEYMOVECURSOR 2/*光标移动键*/#define KEYINVALID 3/*无效键*//*定义符号常量: 真, 假 --- 真为1, 假为0 */#define TRUE 1#define FALSE 0/**********************************************************//* 定义数据结构 *//*棋盘交叉点坐标的数据结构*/struct point{ int x,y;};/**********************************************************//*自定义函数原型说明 */void Init(void);int GetKey(void);int CheckKey(int press);int ChangeOrder(void);int ChessGo(int Order,struct point Cursor);void DoError(void);void DoOK(void);void DoWin(int Order);void MoveCursor(int Order,int press);void DrawCross(int x,int y);void DrawMap(void);int JudgeWin(int Order,struct point Cursor);int JudgeWinLine(int Order,struct point Cursor,int direction);void ShowOrderMsg(int Order);void EndGame(void);/**********************************************************//**********************************************************//* 定义全局变量 */int gPlayOrder; /*指示当前行棋方 */struct point gCursor; /*光标在棋盘上的位置 */char gChessBoard[19][19];/*用于记录棋盘上各点的状态*//**********************************************************//**********************************************************//*主函数*/void main(){ int press; int bOutWhile=FALSE;/*退出循环标志*/ Init();/*初始化图象,数据*/ while(1) { press=GetKey();/*获取用户的按键值*/ switch(CheckKey(press))/*判断按键类别*/ { /*是退出键*/ case KEYEXIT: clrscr();/*清屏*/ bOutWhile = TRUE; break; /*是落子键*/ case KEYFALLCHESS: if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/ DoError();/*落子错误*/ else { DoOK();/*落子正确*/ /*如果当前行棋方赢棋*/ if(JudgeWin(gPlayOrder,gCursor)==TRUE) { DoWin(gPlayOrder); bOutWhile = TRUE;/*退出循环标志置为真*/ } /*否则*/ else /*交换行棋方*/ ChangeOrder(); } break; /*是光标移动键*/ case KEYMOVECURSOR: MoveCursor(gPlayOrder,press); break; /*是无效键*/ case KEYINVALID: break; } if(bOutWhile==TRUE) break; } /*游戏结束*/ EndGame();}/**********************************************************//*界面初始化,数据初始化*/void Init(void){ int i,j; char *Msg[]= { "Player1 key:", " UP----w", " DOWN--s", " LEFT--a", " RIGHT-d", " DO----space", "", "Player2 key:", " UP----up", " DOWN--down", " LEFT--left", " RIGHT-right", " DO----ENTER", "", "exit game:", " ESC", NULL, }; /*先手方为1号玩家*/ gPlayOrder = CHESS1; /*棋盘数据清零, 即棋盘上各点开始的时候都没有棋子*/ for(i=0;i<19;i++) for(j=0;j<19;j++) gChessBoard[i][j]=CHESSNULL; /*光标初始位置*/ ; /*画棋盘*/ textmode(C40); DrawMap(); /*显示操作键说明*/ i=0; textcolor(BROWN); while(Msg[i]!=NULL) { gotoxy(25,3+i); cputs(Msg[i]); i++; } /*显示当前行棋方*/ ShowOrderMsg(gPlayOrder); /*光标移至棋盘的左上角点处*/ gotoxy();}/*画棋盘*/void DrawMap(void){ int i,j; clrscr(); for(i=0;i<19;i++) for(j=0;j<19;j++) DrawCross(i,j);}/*画棋盘上的交叉点*/void DrawCross(int x,int y){ gotoxy(x+MAPXOFT,y+MAPYOFT); /*交叉点上是一号玩家的棋子*/ if(gChessBoard[x][y]==CHESS1) { textcolor(LIGHTBLUE); putch(CHESS1); return; } /*交叉点上是二号玩家的棋子*/ if(gChessBoard[x][y]==CHESS2) { textcolor(LIGHTBLUE); putch(CHESS2); return; } textcolor(GREEN); /*左上角交叉点*/ if(x==0&&y==0) { putch(CROSSLU); return; } /*左下角交叉点*/ if(x==0&&y==18) { putch(CROSSLD); return; } /*右上角交叉点*/ if(x==18&&y==0) { putch(CROSSRU); return; } /*右下角交叉点*/ if(x==18&&y==18) { putch(CROSSRD); return; } /*左边界交叉点*/ if(x==0) { putch(CROSSL); return; } /*右边界交叉点*/ if(x==18) { putch(CROSSR); return; } /*上边界交叉点*/ if(y==0) { putch(CROSSU); return; } /*下边界交叉点*/ if(y==18) { putch(CROSSD); return; } /*棋盘中间的交叉点*/ putch(CROSS);}/*交换行棋方*/int ChangeOrder(void){ if(gPlayOrder==CHESS1) gPlayOrder=CHESS2; else gPlayOrder=CHESS1; return(gPlayOrder);}/*获取按键值*/int GetKey(void){ char lowbyte; int press; while (bioskey(1) == 0) ;/*如果用户没有按键,空循环*/ press=bioskey(0); lowbyte=press&0xff; press=press&0xff00 + toupper(lowbyte); return(press);}/*落子错误处理*/void DoError(void){ sound(1200); delay(50); nosound();}/*赢棋处理*/void DoWin(int Order){ sound(1500);delay(100); sound(0); delay(50); sound(800); delay(100); sound(0); delay(50); sound(1500);delay(100); sound(0); delay(50); sound(800); delay(100); sound(0); delay(50); nosound(); textcolor(RED+BLINK); gotoxy(25,20); if(Order==CHESS1) cputs("PLAYER1 WIN!"); else cputs("PLAYER2 WIN!"); gotoxy(25,21); cputs(" \\<^+^>/"); getch();}/*走棋*/int ChessGo(int Order,struct point Cursor){ /*判断交叉点上有无棋子*/ if(gChessBoard[][]==CHESSNULL) { /*若没有棋子, 则可以落子*/ gotoxy(); textcolor(LIGHTBLUE); putch(Order); gotoxy(); gChessBoard[][]=Order; return TRUE; } else return FALSE;}/*判断当前行棋方落子后是否赢棋*/int JudgeWin(int Order,struct point Cursor){ int i; for(i=0;i<4;i++) /*判断在指定方向上是否有连续5个行棋方的棋子*/ if(JudgeWinLine(Order,Cursor,i)) return TRUE; return FALSE;}/*判断在指定方向上是否有连续5个行棋方的棋子*/int JudgeWinLine(int Order,struct point Cursor,int direction){ int i; struct point pos,dpos; const int testnum = 5; int count; switch(direction) { case 0:/*在水平方向*/ (testnum-1); ; ; ; break; case 1:/*在垂直方向*/ ; (testnum-1); ; ; break; case 2:/*在左下至右上的斜方向*/ (testnum-1); (testnum-1); ; ; break; case 3:/*在左上至右下的斜方向*/ (testnum-1); (testnum-1); ; ; break; } count=0; for(i=0;i=0&&<=18&&>=0&&<=18) { if(gChessBoard[][]==Order) { count++; if(count>=testnum) return TRUE; } else count=0; } ; ; } return FALSE;}/*移动光标*/void MoveCursor(int Order,int press){ switch(press) { case PLAY1UP: if(Order==CHESS1&&>0) ; break; case PLAY1DOWN: if(Order==CHESS1&&<18) ; break; case PLAY1LEFT: if(Order==CHESS1&&>0) ; break; case PLAY1RIGHT: if(Order==CHESS1&&<18) ; break; case PLAY2UP: if(Order==CHESS2&&>0) ; break; case PLAY2DOWN: if(Order==CHESS2&&<18) ; break; case PLAY2LEFT: if(Order==CHESS2&&>0) ; break; case PLAY2RIGHT: if(Order==CHESS2&&<18) ; break; } gotoxy();}/*游戏结束处理*/void EndGame(void){ textmode(C80);}/*显示当前行棋方*/void ShowOrderMsg(int Order){ gotoxy(6,MAPYOFT+20); textcolor(LIGHTRED); if(Order==CHESS1) cputs("Player1 go!"); else cputs("Player2 go!"); gotoxy();}/*落子正确处理*/void DoOK(void){ sound(500); delay(70); sound(600); delay(50); sound(1000); delay(100); nosound();}/*检查用户的按键类别*/int CheckKey(int press){ if(press==ESCAPE) return KEYEXIT;/*是退出键*/ else if ( ( press==PLAY1DO && gPlayOrder==CHESS1) || ( press==PLAY2DO && gPlayOrder==CHESS2) ) return KEYFALLCHESS;/*是落子键*/ else if ( press==PLAY1UP || press==PLAY1DOWN || press==PLAY1LEFT || press==PLAY1RIGHT || press==PLAY2UP || press==PLAY2DOWN || press==PLAY2LEFT || press==PLAY2RIGHT ) return KEYMOVECURSOR;/*是光标移动键*/ else return KEYINVALID;/*按键无效*/}

148 评论

0子爵绿子0

C语言的我倒是没有、、Java的我倒是有个五子棋程序要不要呢

155 评论

万家宅配

把一个棋盘看着一个矩阵.如25行25列.用二维数组arry[25][25]表示,初始化数组所有数据为0;当用户1 在某个arry[i][j]位置输下子后,将arry[i][j]=1;赋值1,用户2下子的位置arry[i][j]=2;同时我们还可以设置一个标识数组,来识别某个位置是否下子了.flag[25][25]={0};初始化.0;当用户1在arry[i][j]处下子后同时把falg[i][j]=1;来标识该处已经下子了.所以下次就不能再在此处下子.如要打印出棋谱只需吧arry[i][j]打印出来, 为1的地方就是w ,,,为2的地方就是b,,为0的地方表示该处未下子..

155 评论

我爱吃酸甜苦辣

天拉.. 我也正在写五子棋,想不出怎么才这么点代码啊???..郁闷.我也研究下,不知道这五子棋能发挥出什么样的下棋水准?

89 评论

赤影妖妖艾可

#include <>#include <>#include <>#include <>#include <>#define CROSSRU     0xbf   /*右上角点*/#define CROSSLU     0xda   /*左上角点*/#define CROSSLD     0xc0   /*左下角点*/#define CROSSRD     0xd9   /*右下角点*/#define CROSSL       0xc3   /*左边*/#define CROSSR       0xb4   /*右边*/#define CROSSU       0xc2   /*上边*/#define CROSSD       0xc1   /*下边*/#define CROSS       0xc5   /*十字交叉点*//*定义棋盘左上角点在屏幕上的位置*/#define MAPXOFT     5#define MAPYOFT     2/*定义1号玩家的操作键键码*/#define PLAY1UP     0x1157/*上移--'W'*/#define PLAY1DOWN   0x1f53/*下移--'S'*/#define PLAY1LEFT   0x1e41/*左移--'A'*/#define PLAY1RIGHT   0x2044/*右移--'D'*/#define PLAY1DO     0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define PLAY2UP     0x4800/*上移--方向键up*/#define PLAY2DOWN   0x5000/*下移--方向键down*/#define PLAY2LEFT   0x4b00/*左移--方向键left*/#define PLAY2RIGHT   0x4d00/*右移--方向键right*/#define PLAY2DO     0x1c0d/*落子--回车键Enter*//*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE       0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 *//*若有棋子, 还应能指出是哪个玩家的棋子   */#define CHESSNULL   0   /*没有棋子*/#define CHESS1       'O'/*一号玩家的棋子*/#define CHESS2       'X'/*二号玩家的棋子*//*定义按键类别*/#define KEYEX99v         0/*退出键*/#define KEYFALLCHESS   1/*落子键*/#define KEYMOVECURSOR   2/*光标移动键*/#define KEYINVALID     3/*无效键*//*定义符号常量: 真, 假 --- 真为1, 假为0 */#define TRUE         1#define FALSE       0/**********************************************************//* 定义数据结构                                           *//*棋盘交叉点坐标的数据结构*/struct point{int x,y;};或者下面这个:#include <>#include <>#include <>#include <>#define N 15#define B 7#define STOP -10000#define OK 1#define NO 0#define UP 328#define DOWN 336#define LEFT 331#define RIGHT 333int a[N+1][N+1];int zx,zy;int write=1,biaoji=0;struct zn{long sum;int y;int x;}w[N+1][N+1],max,max1;void cbar(int i,int x,int y,int r);void map(int a[][]);int getkey();int key();void zuobiao(int x,int y,int i);int tu(int a[][],int write);int wtu(int a[][],int write);int zhineng(int a[][]);int zh5(int y,int x,int a[][]);long zzh5(int b[][],int i);main(){int i,j;int gdriver=DETECT;int gmode;initgraph(&gdriver,&gmode,"");zx=(N+1)/2;zy=(N+1)/2;for(i=1;i<=N;i++)for(j=1;j<=N;j++)a[i][j]=0;map(a);i=1;while(i){int k,n;k=wtu(a,write);if(k==STOP) goto end;map(a);n=zhineng(a);if(n==STOP) goto end;map(a);}end:;}int zhineng(int a[N+1][N+1]){int i,j;int k;;for(i=0;i<=N;i++)for(j=0;j<+N;j++){w[i][j].sum=0;w[i][j].x=i;w[i][j].y=j;}for(i=1;i<=N-4;i++)for(j=1;j<=N-4;j++){k=zh5(i,j,a);if(k==STOP) return (STOP);}for(i=1;i<=N;i++)for(j=1;j<=N;j++){if(((i-zy)*(i-zy)+(j-zx)*(j-zx)))[i][j].sum;;;}}if(a[][]==0){a[][]=-1;zy=;zx=;}}int zh5(int y,int x,int a[N+1][N+1]){int i,j;int b[6][6];long c[13];long d[6][6];long temp;for(i=y;i<=y+4;i++)for(j=x;j<=x+4;j++)b[i+1-y][j+1-x]=a[i][j];c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];for(i=1;i<=12;i++){switch(c[i]){case 5:biaoji=1;return(STOP);case -5:biaoji=-1;return(STOP);case -4:c[i]=100000;break;case 4:c[i]=100000;break;case -3:c[i]=150;break;case 3:c[i]=150;break;case -2:c[i]=120;break;case 2:c[i]=100;break;case -1:c[i]=1;break;case 1:c[i]=1;break;default: c[i]=0;}}for(i=1;i<=12;i++){if(c[i]==150)c[i]+=zzh5(b,i);}for(i=1;i<=5;i++)for(j=1;j<=5;j++)d[i][j]=0;for(i=1;i<=5;i++)for(j=1;j<=5;j++){if(i==j) d[i][j]+=c[11];if((i+j)==6) d[i][j]+=c[12];d[i][j]+=c[i]+c[j+5];}for(i=1;i<=5;i++)for(j=1;j<=5;j++){if(b[i][j]!=0)d[i][j]=-2;};;;for(i=1;i<=5;i++)for(j=1;j<=5;j++){if((()*()+()*())){[i][j];;;}}}}long zzh5(int b[6][6],int n){int i,j,k,l,m;switch(n){case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;case 3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;case 4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;case 5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;case 6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;case 7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;case 8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;case 9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;case 10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;case 11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;case 12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;}if((i==0&&j==1&&k==1&&l==1&&m==0))return (900);if((i==0&&j==-1&&k==-1&&l==-1&&m==0))return(1000);if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))return(20);if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))return(20);if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))return(-60);if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))return(-60);}int wtu(int a[N+1][N+1],int write){int i=1;map(a);zuobiao(zx,zy,1);while(i){int k;k=tu(a,write);if(k==OK) i=0;if(k==STOP) return (STOP);}}int getkey(){int key,lo,hi;key=bioskey(0);lo=key&0x00ff;hi=(key&0xff00)>>8;return((lo==0) ? hi+256:lo);}int key(){int k;k=getkey();switch(k){case 27: return (STOP);case 13:case ' ': return (OK);case 328: return (UP);case 336: return (DOWN);case 331: return (LEFT);case 333: return (RIGHT);default: return (NO);}}void zuobiao(int x,int y,int i){int r;if(i!=0){setcolor(GREEN);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else{if(a[zy][zx]==1){setcolor(8);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else if(a[zy][zx]==-1){setcolor(WHITE);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else{setcolor(B);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);setcolor(RED); line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);line(75+25*zx,25+25*zy-5,75+25*zx,25+25*zy+5);}}}int tu(int a[N+1][N+1],int write){int k;re:k=key();if(k==OK){if(a[zy][zx]==0){a[zy][zx]=write;}elsegoto re;}if(k==STOP) return(STOP);if(k==NO) goto re;if(k==UP){int i,j;if(zy==1) j=zy;else j=zy-1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;}if(k==DOWN){int i,j;if(zy==N) j=zy;else j=zy+1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;}if(k==LEFT){int i,j;if(zx==1) i=zx;else i=zx-1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;}if(k==RIGHT){int i,j;if(zx==N) i=zx;else i=zx+1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;}}void cbar(int i,int x,int y,int r){if(i!=0){if(i==1)setcolor(8);else if(i==-1)setcolor(WHITE);for(i=1;i<=r;i++){circle(x,y,i);}}}void map(int a[N+1][N+1]){int i,j;cleardevice();setbkcolor(B);setcolor(RED);for(i=0;i

225 评论

相关问答

  • 毕业论文c语言重吗

    先说对楼主的建议:C在应用方面的优势在于底层,以及任何对效率有苛刻要求的地方。这种地方并不少,如操作系统、嵌入式、一些软件中对效率要求高的部分。很多java程序

    活力的维维 4人参与回答 2023-12-08
  • c语言毕业论文的外文文献

    参考文献是在学术研究过程中,对某一著作或论文的整体的参考或借鉴.征引过的文献在注释中已注明,不再出现于文后参考文献中.外文参考文献就是指论文是引用的文献原文是国

    沸腾的苦丁茶 4人参与回答 2023-12-09
  • 五子棋毕业论文附录

    分条写:课题做到突出中心思想,条理清晰,结构合理,观点正确,具有较好的连续性等。完成相关的XXXX。 第一步:课题适应的岗位名称; 第二部:课题背景; 第三步,

    pisces850318 3人参与回答 2023-12-06
  • 毕业论文设计五子棋

    写课题任务时主要从“想借助这篇论文达到什么样的目的”入手,表明写作意图;写课题要求时主要从“写作时要注意的点”入手,表明写作的时候运用到的研究方法等方面的内容。

    雅婷0302 3人参与回答 2023-12-07
  • c语言和java语言毕业论文

    摘 要网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情。建立搜索引擎就是解决这个问题的最好方法。本论文首先详细介绍了基于英特网的搜索引擎的系统结

    h071232003 5人参与回答 2023-12-09