求最短路径输出顺序错误

求A到B的最短路径,并绕开C(ABC三点不同)
目前分类为5类,第二、三类中要求输出和实际输出的顺序不对
源码:

#include
#include
int xa,ya,xb,yb,xc,yc,dx,dy,dxc,dyc,MIN_STEPS;
int main(){
scanf("%d %d %d %d %d %d",&xa,&ya,&xb,&yb,&xc,&yc);
dx=xb-xa;dy=yb-ya;
dxc=xc-xa;dyc=yc-ya;
MIN_STEPS=abs(dx)+abs(dy);
printf("%d\n",MIN_STEPS);

if(xc!=xa&&xc!=xb&&yc!=ya&&yc!=yb)
{
for(;dx>0;dx--)
{
    printf("R");
}
for(;dx<0;dx++)
{
    printf("L");
}
for(;dy>0;dy--)
{
    printf("U");
}
for(;dy<0;dy++)
{
    printf("D");
}
}



else if(yc=ya&&dx*dxc>0&&abs(dx)-abs(dxc)>=0)
{
for(;dy>0;dy--)
{
    printf("U");
}
for(;dy<0;dy++)
{
    printf("D");
}
for(;dx>0;dx--)
{
    printf("R");
}
for(;dx<0;dx++)
{
    printf("L");
}
}



else if(xc=xa&&dy*dyc>0&&abs(dy)-abs(dyc)>=0)
{
for(;dx>0;dx--)
{
    printf("R");
}
for(;dx<0;dx++)
{
    printf("L");
}
for(;dy>0;dy--)
{
    printf("U");
}
for(;dy<0;dy++)
{
    printf("D");
}
}



else if(xc=xb&&dy*dyc>0&&abs(dy)-abs(dyc)>0)
{
for(;dy>0;dy--)
{
    printf("U");
}
for(;dy<0;dy++)
{
    printf("D");
}
for(;dx>0;dx--)
{
    printf("R");
}
for(;dx<0;dx++)
{
    printf("L");
}
}



else if(yc=yb&&dx*dxc>0&&abs(dx)-abs(dxc)>0)
{
for(;dx>0;dx--)
{
    printf("R");
}
for(;dx<0;dx++)
{
    printf("L");
}
for(;dy>0;dy--)
{
    printf("U");
}
for(;dy<0;dy++)
{
    printf("D");
}
}
}

第一四五类没有问题
其中第二类yc=ya本应该先上下再左右
但输出了

img

第三类xc=xa本应该先左右再上下
但输出了

img

这是为什么呢

if判断条件,相等判断用==,一个=是赋值