EnQueue(Q, ( j)); while(!Queue Empty(Q)) De Queue(Q, a); x-a. x,y-a. y if(glx-1]y==old) glx-1Ly=color EnQueue(Q,{x-1,y}),∥修改左邻点的颜色 if(glx]y-1==old) glxly-1=color EnQueue(Q{xy-1},/修改上邻点的颜色 if(gx+1]y]==old) glx+lllylcolor; EnQueue(Q,{x+1,y}),∥修改右邻点的颜色 if(glx]y+1=old) g[x]y+1=color; EnQueue(Q,{xy+1},∥修改下邻点的颜色 i//while i//Repaint Color 分析:本算法采用了类似于图的广度优先遍历的思想用两个队列保存相邻同色点 的横坐标和纵坐标递归形式的算法该怎么写呢? 3.21 void nibolan(char* str char*newy/把中缀表达式str转换成逆波兰式new p=strq=new,∥为方便起见设str的两端都加上了优先级最低的特殊符号 InitStack(s,/为运算符栈 while if(*p是字母)*q+=*p,∥直接输出EnQueue(Q,{I,j}); while(!QueueEmpty(Q)) { DeQueue(Q,a); x=a.x;y=a.y; if(x>1) if(g[x-1][y]==old) { g[x-1][y]=color; EnQueue(Q,{x-1,y}); //修改左邻点的颜色 } if(y>1) if(g[x][y-1]==old) { g[x][y-1]=color; EnQueue(Q,{x,y-1}); //修改上邻点的颜色 } if(x<m) if(g[x+1][y]==old) { g[x+1][y]=color; EnQueue(Q,{x+1,y}); //修改右邻点的颜色 } if(y<n) if(g[x][y+1]==old) { g[x][y+1]=color; EnQueue(Q,{x,y+1}); //修改下邻点的颜色 } }//while }//Repaint_Color 分析:本算法采用了类似于图的广度优先遍历的思想,用两个队列保存相邻同色点 的横坐标和纵坐标.递归形式的算法该怎么写呢? 3.21 void NiBoLan(char *str,char *new)//把中缀表达式 str 转换成逆波兰式 new { p=str;q=new; //为方便起见,设 str 的两端都加上了优先级最低的特殊符号 InitStack(s); //s 为运算符栈 while(*p) { if(*p 是字母)) *q++=*p; //直接输出 else {